home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / slperl.zoo / atarist / perlman.txt < prev    next >
Text File  |  1992-08-09  |  212KB  |  7,393 lines

  1.  
  2.  
  3.  
  4.              Printed August 7, 1992
  5. PERL(1)
  6.  
  7.  
  8.  
  9. NAME
  10.      perl - Practical Extraction and Report Language
  11.  
  12. SYNOPSIS
  13.      perl [options] filename args
  14.  
  15. DESCRIPTION
  16.      Perl is an    interpreted language optimized for scanning
  17.      arbitrary text files, extracting information from those text
  18.      files, and    printing reports based on that information.  It's
  19.      also a good language for many system management tasks.  The
  20.      language is intended to be    practical (easy    to use,
  21.      efficient,    complete) rather than beautiful    (tiny, elegant,
  22.      minimal).    It combines (in    the author's opinion, anyway)
  23.      some of the best features of C, sed, awk, and sh, so people
  24.      familiar with those languages should have little difficulty
  25.      with it.  (Language historians will also note some    vestiges
  26.      of    csh, Pascal, and even BASIC-PLUS.)  Expression syntax
  27.      corresponds quite closely to C expression syntax.    Unlike
  28.      most Unix utilities, perl does not    arbitrarily limit the
  29.      size of your data--if you've got the memory, perl can slurp
  30.      in    your whole file    as a single string.  Recursion is of
  31.      unlimited depth.  And the hash tables used    by associative
  32.      arrays grow as necessary to prevent degraded performance.
  33.      Perl uses sophisticated pattern matching techniques to scan
  34.      large amounts of data very    quickly.  Although optimized for
  35.      scanning text, perl can also deal with binary data, and can
  36.      make dbm files look like associative arrays (where    dbm is
  37.      available).  Setuid perl scripts are safer    than C programs
  38.      through a dataflow    tracing    mechanism which    prevents many
  39.      stupid security holes.  If    you have a problem that    would
  40.      ordinarily    use sed    or awk or sh, but it exceeds their
  41.      capabilities or must run a    little faster, and you don't want
  42.      to    write the silly    thing in C, then perl may be for you.
  43.      There are also translators    to turn    your sed and awk scripts
  44.      into perl scripts.     OK, enough hype.
  45.  
  46.      Upon startup, perl    looks for your script in one of    the
  47.      following places:
  48.  
  49.      1.     Specified line    by line    via -e switches    on the command
  50.      line.
  51.  
  52.      2.     Contained in the file specified by the    first filename on
  53.      the command line.  (Note that systems supporting the #!
  54.      notation invoke interpreters this way.)
  55.  
  56.      3.     Passed    in implicitly via standard input.  This    only
  57.      works if there    are no filename    arguments--to pass
  58.      arguments to a    stdin script you must explicitly specify
  59.      a - for the script name.
  60.  
  61.  
  62.  
  63. Page 1                  Nixdorf TARGON Operating System
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.              Printed August 7, 1992
  71. PERL(1)
  72.  
  73.  
  74.  
  75.      After locating your script, perl compiles it to an    internal
  76.      form.  If the script is syntactically correct, it is
  77.      executed.
  78.  
  79.      Options
  80.  
  81.      Note: on first reading this section may not make much sense
  82.      to    you.  It's here    at the front for easy reference.
  83.  
  84.      A single-character    option may be combined with the    following
  85.      option, if    any.  This is particularly useful when invoking    a
  86.      script using the #! construct which only allows one
  87.      argument.    Example:
  88.  
  89.       #!/usr/bin/perl -spi.bak # same as -s    -p -i.bak
  90.       ...
  91.  
  92.      Options include:
  93.  
  94.      -0digits
  95.       specifies the    record separator ($/) as an octal number.
  96.       If there are no digits, the null character is    the
  97.       separator.  Other switches may precede or follow the
  98.       digits.  For example,    if you have a version of find
  99.       which    can print filenames terminated by the null
  100.       character, you can say this:
  101.  
  102.           find . -name '*.bak' -print0 | perl -n0e unlink
  103.  
  104.       The special value 00 will cause Perl to slurp    files in
  105.       paragraph mode.  The value 0777 will cause Perl to
  106.       slurp    files whole since there    is no legal character
  107.       with that value.
  108.  
  109.      -a      turns    on autosplit mode when used with a -n or -p.  An
  110.       implicit split command to the    @F array is done as the
  111.       first    thing inside the implicit while    loop produced by
  112.       the -n or -p.
  113.  
  114.            perl -ane 'print    pop(@F), "\n";'
  115.  
  116.       is equivalent    to
  117.  
  118.            while (<>) {
  119.             @F = split(' ');
  120.             print pop(@F), "\n";
  121.            }
  122.  
  123.  
  124.      -c      causes perl to check the syntax of the script    and then
  125.       exit without executing it.
  126.  
  127.  
  128.  
  129. Page 2                  Nixdorf TARGON Operating System
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.              Printed August 7, 1992
  137. PERL(1)
  138.  
  139.  
  140.  
  141.      -d      runs the script under    the perl debugger.  See    the
  142.       section on Debugging.
  143.  
  144.      -Dnumber
  145.       sets debugging flags.     To watch how it executes your
  146.       script, use -D14.  (This only    works if debugging is
  147.       compiled into    your perl.)  Another nice value    is
  148.       -D1024, which    lists your compiled syntax tree.  And
  149.       -D512    displays compiled regular expressions.
  150.  
  151.      -e    commandline
  152.       may be used to enter one line    of script.  Multiple -e
  153.       commands may be given    to build up a multi-line script.
  154.       If -e    is given, perl will not    look for a script
  155.       filename in the argument list.
  156.  
  157.      -iextension
  158.       specifies that files processed by the    <> construct are
  159.       to be    edited in-place.  It does this by renaming the
  160.       input    file, opening the output file by the same name,
  161.       and selecting    that output file as the    default    for print
  162.       statements.  The extension, if supplied, is added to
  163.       the name of the old file to make a backup copy.  If no
  164.       extension is supplied, no backup is made.  Saying "perl
  165.       -p -i.bak -e "s/foo/bar/;" ... " is the same as using
  166.       the script:
  167.  
  168.            #!/usr/bin/perl -pi.bak
  169.            s/foo/bar/;
  170.  
  171.       which    is equivalent to
  172.  
  173.            #!/usr/bin/perl
  174.            while (<>) {
  175.             if ($ARGV ne $oldargv) {
  176.              rename($ARGV, $ARGV . '.bak');
  177.              open(ARGVOUT, ">$ARGV");
  178.              select(ARGVOUT);
  179.              $oldargv = $ARGV;
  180.             }
  181.             s/foo/bar/;
  182.            }
  183.            continue    {
  184.            print;     #    this prints to original    filename
  185.            }
  186.            select(STDOUT);
  187.  
  188.       except that the -i form doesn't need to compare $ARGV
  189.       to $oldargv to know when the filename    has changed.  It
  190.       does,    however, use ARGVOUT for the selected filehandle.
  191.       Note that STDOUT is restored as the default output
  192.  
  193.  
  194.  
  195. Page 3                  Nixdorf TARGON Operating System
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.              Printed August 7, 1992
  203. PERL(1)
  204.  
  205.  
  206.  
  207.       filehandle after the loop.
  208.  
  209.       You can use eof to locate the    end of each input file,
  210.       in case you want to append to    each file, or reset line
  211.       numbering (see example under eof).
  212.  
  213.      -Idirectory
  214.       may be used in conjunction with -P to    tell the C
  215.       preprocessor where to    look for include files.     By
  216.       default /usr/include and /usr/lib/perl are searched.
  217.  
  218.      -loctnum
  219.       enables automatic line-ending    processing.  It    has two
  220.       effects:  first, it automatically chops the line
  221.       terminator when used with -n or -p , and second, it
  222.       assigns $\ to    have the value of octnum so that any
  223.       print    statements will    have that line terminator added
  224.       back on.  If octnum is omitted, sets $\ to the current
  225.       value    of $/.    For instance, to trim lines to 80
  226.       columns:
  227.  
  228.            perl -lpe 'substr($_, 80) = ""'
  229.  
  230.       Note that the    assignment $\ =    $/ is done when    the
  231.       switch is processed, so the input record separator can
  232.       be different than the    output record separator    if the -l
  233.       switch is followed by    a -0 switch:
  234.  
  235.            gnufind / -print0 | perl    -ln0e 'print "found $_"    if -p'
  236.  
  237.       This sets $\ to newline and then sets    $/ to the null
  238.       character.
  239.  
  240.      -n      causes perl to assume    the following loop around your
  241.       script, which    makes it iterate over filename arguments
  242.       somewhat like    "sed -n" or awk:
  243.  
  244.            while (<>) {
  245.             ...          #    your script goes here
  246.            }
  247.  
  248.       Note that the    lines are not printed by default.  See -p
  249.       to have lines    printed.  Here is an efficient way to
  250.       delete all files older than a    week:
  251.  
  252.            find . -mtime +7    -print | perl -nle 'unlink;'
  253.  
  254.       This is faster than using the    -exec switch of    find
  255.       because you don't have to start a process on every
  256.       filename found.
  257.  
  258.  
  259.  
  260.  
  261. Page 4                  Nixdorf TARGON Operating System
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.              Printed August 7, 1992
  269. PERL(1)
  270.  
  271.  
  272.  
  273.      -p      causes perl to assume    the following loop around your
  274.       script, which    makes it iterate over filename arguments
  275.       somewhat like    sed:
  276.  
  277.            while (<>) {
  278.             ...          #    your script goes here
  279.            } continue {
  280.             print;
  281.            }
  282.  
  283.       Note that the    lines are printed automatically.  To
  284.       suppress printing use    the -n switch.    A -p overrides a
  285.       -n switch.
  286.  
  287.      -P      causes your script to    be run through the C preprocessor
  288.       before compilation by    perl.  (Since both comments and
  289.       cpp directives begin with the    # character, you should
  290.       avoid    starting comments with any words recognized by
  291.       the C    preprocessor such as "if", "else" or "define".)
  292.  
  293.      -s      enables some rudimentary switch parsing for switches on
  294.       the command line after the script name but before any
  295.       filename arguments (or before    a --).    Any switch found
  296.       there    is removed from    @ARGV and sets the corresponding
  297.       variable in the perl script.    The following script
  298.       prints "true"    if and only if the script is invoked with
  299.       a -xyz switch.
  300.  
  301.            #!/usr/bin/perl -s
  302.            if ($xyz) { print "true\n"; }
  303.  
  304.  
  305.      -S      makes    perl use the PATH environment variable to search
  306.       for the script (unless the name of the script    starts
  307.       with a slash).  Typically this is used to emulate #!
  308.       startup on machines that don't support #!, in    the
  309.       following manner:
  310.  
  311.            #!/usr/bin/perl
  312.            eval "exec /usr/bin/perl    -S $0 $*"
  313.             if $running_under_some_shell;
  314.  
  315.       The system ignores the first line and    feeds the script
  316.       to /bin/sh, which proceeds to    try to execute the perl
  317.       script as a shell script.  The shell executes    the
  318.       second line as a normal shell    command, and thus starts
  319.       up the perl interpreter.  On some systems $0 doesn't
  320.       always contain the full pathname, so the -S tells perl
  321.       to search for    the script if necessary.  After    perl
  322.       locates the script, it parses    the lines and ignores
  323.       them because the variable $running_under_some_shell is
  324.  
  325.  
  326.  
  327. Page 5                  Nixdorf TARGON Operating System
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.              Printed August 7, 1992
  335. PERL(1)
  336.  
  337.  
  338.  
  339.       never    true.  A better    construct than $* would    be
  340.       ${1+"$@"}, which handles embedded spaces and such in
  341.       the filenames, but doesn't work if the script    is being
  342.       interpreted by csh.  In order    to start up sh rather
  343.       than csh, some systems may have to replace the #! line
  344.       with a line containing just a    colon, which will be
  345.       politely ignored by perl.  Other systems can't control
  346.       that,    and need a totally devious construct that will
  347.       work under any of csh, sh or perl, such as the
  348.       following:
  349.  
  350.            eval '(exit $?0)' && eval 'exec /usr/bin/perl -S    $0 ${1+"$@"}'
  351.            & eval 'exec /usr/bin/perl -S $0    $argv:q'
  352.             if 0;
  353.  
  354.  
  355.      -u      causes perl to dump core after compiling your    script.
  356.       You can then take this core dump and turn it into an
  357.       executable file by using the undump program (not
  358.       supplied).  This speeds startup at the expense of some
  359.       disk space (which you    can minimize by    stripping the
  360.       executable).    (Still,    a "hello world"    executable comes
  361.       out to about 200K on my machine.)  If    you are    going to
  362.       run your executable as a set-id program then you should
  363.       probably compile it using taintperl rather than normal
  364.       perl.     If you    want to    execute    a portion of your script
  365.       before dumping, use the dump operator    instead.  Note:
  366.       availability of undump is platform specific and may not
  367.       be available for a specific port of perl.
  368.  
  369.      -U      allows perl to do unsafe operations.    Currently the
  370.       only "unsafe"    operations are the unlinking of
  371.       directories while running as superuser, and running
  372.       setuid programs with fatal taint checks turned into
  373.       warnings.
  374.  
  375.      -v      prints the version and patchlevel of your perl
  376.       executable.
  377.  
  378.      -w      prints warnings about    identifiers that are mentioned
  379.       only once, and scalar    variables that are used    before
  380.       being    set.  Also warns about redefined subroutines, and
  381.       references to    undefined filehandles or filehandles
  382.       opened readonly that you are attempting to write on.
  383.       Also warns you if you    use == on values that don't look
  384.       like numbers,    and if your subroutines    recurse    more than
  385.       100 deep.
  386.  
  387.      -xdirectory
  388.       tells    perl that the script is    embedded in a message.
  389.       Leading garbage will be discarded until the first line
  390.  
  391.  
  392.  
  393. Page 6                  Nixdorf TARGON Operating System
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.              Printed August 7, 1992
  401. PERL(1)
  402.  
  403.  
  404.  
  405.       that starts with #! and contains the string "perl".
  406.       Any meaningful switches on that line will be applied
  407.       (but only one    group of switches, as with normal #!
  408.       processing).    If a directory name is specified, Perl
  409.       will switch to that directory    before running the
  410.       script.  The -x switch only controls the the disposal
  411.       of leading garbage.  The script must be terminated with
  412.       __END__ if there is trailing garbage to be ignored (the
  413.       script can process any or all    of the trailing    garbage
  414.       via the DATA filehandle if desired).
  415.  
  416.      Data Types    and Objects
  417.  
  418.      Perl has three data types:    scalars, arrays    of scalars, and
  419.      associative arrays    of scalars.  Normal arrays are indexed by
  420.      number, and associative arrays by string.
  421.  
  422.      The interpretation    of operations and values in perl
  423.      sometimes depends on the requirements of the context around
  424.      the operation or value.  There are    three major contexts:
  425.      string, numeric and array.     Certain operations return array
  426.      values in contexts    wanting    an array, and scalar values
  427.      otherwise.     (If this is true of an    operation it will be
  428.      mentioned in the documentation for    that operation.)
  429.      Operations    which return scalars don't care    whether    the
  430.      context is    looking    for a string or    a number, but scalar
  431.      variables and values are interpreted as strings or    numbers
  432.      as    appropriate to the context.  A scalar is interpreted as
  433.      TRUE in the boolean sense if it is    not the    null string or 0.
  434.      Booleans returned by operators are    1 for true and 0 or ''
  435.      (the null string) for false.
  436.  
  437.      There are actually    two varieties of null string: defined and
  438.      undefined.     Undefined null    strings    are returned when there
  439.      is    no real    value for something, such as when there    was an
  440.      error, or at end of file, or when you refer to an
  441.      uninitialized variable or element of an array.  An    undefined
  442.      null string may become defined the    first time you access it,
  443.      but prior to that you can use the defined() operator to
  444.      determine whether the value is defined or not.
  445.  
  446.      References    to scalar variables always begin with '$', even
  447.      when referring to a scalar    that is    part of    an array.  Thus:
  448.  
  449.      $days         # a simple scalar variable
  450.      $days[28]     # 29th    element    of array @days
  451.      $days{'Feb'}     # one value from an associative array
  452.      $#days         # last    index of array @days
  453.  
  454.      but entire    arrays or array    slices are denoted by '@':
  455.  
  456.  
  457.  
  458.  
  459. Page 7                  Nixdorf TARGON Operating System
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.              Printed August 7, 1992
  467. PERL(1)
  468.  
  469.  
  470.  
  471.      @days         # ($days[0], $days[1],... $days[n])
  472.      @days[3,4,5]     # same    as @days[3..5]
  473.      @days{'a','c'}     # same    as ($days{'a'},$days{'c'})
  474.  
  475.      and entire    associative arrays are denoted by '%':
  476.  
  477.      %days         # (key1, val1,    key2, val2 ...)
  478.  
  479.      Any of these eight    constructs may serve as    an lvalue, that
  480.      is, may be    assigned to.  (It also turns out that an
  481.      assignment    is itself an lvalue in certain contexts--see
  482.      examples under s, tr and chop.)  Assignment to a scalar
  483.      evaluates the righthand side in a scalar context, while
  484.      assignment    to an array or array slice evaluates the
  485.      righthand side in an array    context.
  486.  
  487.      You may find the length of    array @days by evaluating
  488.      "$#days", as in csh.  (Actually, it's not the length of the
  489.      array, it's the subscript of the last element, since there
  490.      is    (ordinarily) a 0th element.)  Assigning    to $#days changes
  491.      the length    of the array.  Shortening an array by this method
  492.      does not actually destroy any values.  Lengthening    an array
  493.      that was previously shortened recovers the    values that were
  494.      in    those elements.     You can also gain some    measure    of
  495.      efficiency    by preextending    an array that is going to get
  496.      big.  (You    can also extend    an array by assigning to an
  497.      element that is off the end of the    array.    This differs from
  498.      assigning to $#whatever in    that intervening values    are set
  499.      to    null rather than recovered.)  You can truncate an array
  500.      down to nothing by    assigning the null list    () to it.  The
  501.      following are exactly equivalent
  502.  
  503.       @whatever = ();
  504.       $#whatever = $[ - 1;
  505.  
  506.  
  507.      If    you evaluate an    array in a scalar context, it returns the
  508.      length of the array.  The following is always true:
  509.  
  510.       scalar(@whatever) == $#whatever - $[ + 1;
  511.  
  512.      If    you evaluate an    associative array in a scalar context, it
  513.      returns a value which is true if and only if the array
  514.      contains any elements.  (If there are any elements, the
  515.      value returned is a string    consisting of the number of used
  516.      buckets and the number of allocated buckets, separated by a
  517.      slash.)
  518.  
  519.      Multi-dimensional arrays are not directly supported, but see
  520.      the discussion of the $; variable later for a means of
  521.      emulating multiple    subscripts with    an associative array.
  522.  
  523.  
  524.  
  525. Page 8                  Nixdorf TARGON Operating System
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.              Printed August 7, 1992
  533. PERL(1)
  534.  
  535.  
  536.  
  537.      You could also write a subroutine to turn multiple
  538.      subscripts    into a single subscript.
  539.  
  540.      Every data    type has its own namespace.  You can, without
  541.      fear of conflict, use the same name for a scalar variable,
  542.      an    array, an associative array, a filehandle, a subroutine
  543.      name, and/or a label.  Since variable and array references
  544.      always start with '$', '@', or '%', the "reserved"    words
  545.      aren't in fact reserved with respect to variable names.
  546.      (They ARE reserved    with respect to    labels and filehandles,
  547.      however, which don't have an initial special character.
  548.      Hint: you could say open(LOG,'logfile') rather than
  549.      open(log,'logfile').  Using uppercase filehandles also
  550.      improves readability and protects you from    conflict with
  551.      future reserved words.)  Case IS significant--"FOO", "Foo"
  552.      and "foo" are all different names.     Names which start with    a
  553.      letter may    also contain digits and    underscores.  Names which
  554.      do    not start with a letter    are limited to one character,
  555.      e.g. "$%" or "$$".     (Most of the one character names have a
  556.      predefined    significance to    perl.  More later.)
  557.  
  558.      Numeric literals are specified in any of the usual    floating
  559.      point or integer formats:
  560.  
  561.      12345
  562.      12345.67
  563.      .23E-10
  564.      0xffff        # hex
  565.      0377  # octal
  566.      4_294_967_296
  567.  
  568.      String literals are delimited by either single or double
  569.      quotes.  They work    much like shell    quotes:     double-quoted
  570.      string literals are subject to backslash and variable
  571.      substitution; single-quoted strings are not (except for \'
  572.      and \\).  The usual backslash rules apply for making
  573.      characters    such as    newline, tab, etc., as well as some more
  574.      exotic forms:
  575.  
  576.       \t        tab
  577.       \n        newline
  578.       \r        return
  579.       \f        form feed
  580.       \b        backspace
  581.       \a        alarm (bell)
  582.       \e        escape
  583.       \033        octal char
  584.       \x1b        hex    char
  585.       \c[        control char
  586.       \l        lowercase next char
  587.       \u        uppercase next char
  588.  
  589.  
  590.  
  591. Page 9                  Nixdorf TARGON Operating System
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.              Printed August 7, 1992
  599. PERL(1)
  600.  
  601.  
  602.  
  603.       \L        lowercase till \E
  604.       \U        uppercase till \E
  605.       \E        end    case modification
  606.  
  607.      You can also embed    newlines directly in your strings, i.e.
  608.      they can end on a different line than they    begin.    This is
  609.      nice, but if you forget your trailing quote, the error will
  610.      not be reported until perl    finds another line containing the
  611.      quote character, which may    be much    further    on in the script.
  612.      Variable substitution inside strings is limited to    scalar
  613.      variables,    normal array values, and array slices.    (In other
  614.      words, identifiers    beginning with $ or @, followed    by an
  615.      optional bracketed    expression as a    subscript.)  The
  616.      following code segment prints out "The price is $100."
  617.  
  618.      $Price    = '$100';        # not interpreted
  619.      print "The price is $Price.\n";# interpreted
  620.  
  621.      Note that you can put curly brackets around the identifier
  622.      to    delimit    it from    following alphanumerics.  Also note that
  623.      a single quoted string must be separated from a preceding
  624.      word by a space, since single quote is a valid character in
  625.      an    identifier (see    Packages).
  626.  
  627.      Two special literals are __LINE__ and __FILE__, which
  628.      represent the current line    number and filename at that point
  629.      in    your program.  They may    only be    used as    separate tokens;
  630.      they will not be interpolated into    strings.  In addition,
  631.      the token __END__ may be used to indicate the logical end of
  632.      the script    before the actual end of file.    Any following
  633.      text is ignored, but may be read via the DATA filehandle.
  634.      (The DATA filehandle may read data    only from the main
  635.      script, but not from any required file or evaluated string.)
  636.      The two control characters    ^D and ^Z are synonyms for
  637.      __END__.
  638.  
  639.      A word that doesn't have any other    interpretation in the
  640.      grammar will be treated as    if it had single quotes    around
  641.      it.  For this purpose, a word consists only of alphanumeric
  642.      characters    and underline, and must    start with an alphabetic
  643.      character.     As with filehandles and labels, a bare    word that
  644.      consists entirely of lowercase letters risks conflict with
  645.      future reserved words, and    if you use the -w switch, Perl
  646.      will warn you about any such words.
  647.  
  648.      Array values are interpolated into    double-quoted strings by
  649.      joining all the elements of the array with    the delimiter
  650.      specified in the $" variable, space by default.  (Since in
  651.      versions of perl prior to 3.0 the @ character was not a
  652.      metacharacter in double-quoted strings, the interpolation of
  653.      @array, $array[EXPR], @array[LIST], $array{EXPR}, or
  654.  
  655.  
  656.  
  657. Page 10                  Nixdorf TARGON Operating System
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.              Printed August 7, 1992
  665. PERL(1)
  666.  
  667.  
  668.  
  669.      @array{LIST} only happens if array    is referenced elsewhere
  670.      in    the program or is predefined.)    The following are
  671.      equivalent:
  672.  
  673.       $temp    = join($",@ARGV);
  674.       system "echo $temp";
  675.  
  676.       system "echo @ARGV";
  677.  
  678.      Within search patterns (which also    undergo    double-quotish
  679.      substitution) there is a bad ambiguity:  Is /$foo[bar]/ to
  680.      be    interpreted as /${foo}[bar]/ (where [bar] is a character
  681.      class for the regular expression) or as /${foo[bar]}/ (where
  682.      [bar] is the subscript to array @foo)?  If    @foo doesn't
  683.      otherwise exist, then it's    obviously a character class.  If
  684.      @foo exists, perl takes a good guess about    [bar], and is
  685.      almost always right.  If it does guess wrong, or if you're
  686.      just plain    paranoid, you can force    the correct
  687.      interpretation with curly brackets    as above.
  688.  
  689.      A line-oriented form of quoting is    based on the shell here-
  690.      is    syntax.     Following a <<    you specify a string to    terminate
  691.      the quoted    material, and all lines    following the current
  692.      line down to the terminating string are the value of the
  693.      item.  The    terminating string may be either an identifier (a
  694.      word), or some quoted text.  If quoted, the type of quotes
  695.      you use determines    the treatment of the text, just    as in
  696.      regular quoting.  An unquoted identifier works like double
  697.      quotes.  There must be no space between the << and    the
  698.      identifier.  (If you put a    space it will be treated as a
  699.      null identifier, which is valid, and matches the first blank
  700.      line--see Merry Christmas example below.)    The terminating
  701.      string must appear    by itself (unquoted and    with no
  702.      surrounding whitespace) on    the terminating    line.
  703.  
  704.       print    <<EOF;          #    same as    above
  705.      The price is $Price.
  706.      EOF
  707.  
  708.       print    <<"EOF";      #    same as    above
  709.      The price is $Price.
  710.      EOF
  711.  
  712.       print    << x 10;      #    null identifier    is delimiter
  713.      Merry Christmas!
  714.  
  715.       print    <<`EOC`;      #    execute    commands
  716.      echo hi there
  717.      echo lo there
  718.      EOC
  719.  
  720.  
  721.  
  722.  
  723. Page 11                  Nixdorf TARGON Operating System
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.              Printed August 7, 1992
  731. PERL(1)
  732.  
  733.  
  734.  
  735.       print    <<foo, <<bar; #    you can    stack them
  736.      I said foo.
  737.      foo
  738.      I said bar.
  739.      bar
  740.  
  741.      Array literals are    denoted    by separating individual values
  742.      by    commas,    and enclosing the list in parentheses:
  743.  
  744.       (LIST)
  745.  
  746.      In    a context not requiring    an array value,    the value of the
  747.      array literal is the value    of the final element, as in the    C
  748.      comma operator.  For example,
  749.  
  750.      @foo =    ('cc', '-E', $bar);
  751.  
  752.      assigns the entire    array value to array foo, but
  753.  
  754.      $foo =    ('cc', '-E', $bar);
  755.  
  756.      assigns the value of variable bar to variable foo.     Note
  757.      that the value of an actual array in a scalar context is the
  758.      length of the array; the following    assigns    to $foo    the value
  759.      3:
  760.  
  761.      @foo =    ('cc', '-E', $bar);
  762.      $foo =    @foo;          #    $foo gets 3
  763.  
  764.      You may have an optional comma before the closing
  765.      parenthesis of an array literal, so that you can say:
  766.  
  767.      @foo =    (
  768.       1,
  769.       2,
  770.       3,
  771.      );
  772.  
  773.      When a LIST is evaluated, each element of the list    is
  774.      evaluated in an array context, and    the resulting array value
  775.      is    interpolated into LIST just as if each individual element
  776.      were a member of LIST.  Thus arrays lose their identity in    a
  777.      LIST--the list
  778.  
  779.       (@foo,@bar,&SomeSub)
  780.  
  781.      contains all the elements of @foo followed    by all the
  782.      elements of @bar, followed    by all the elements returned by
  783.      the subroutine named SomeSub.
  784.  
  785.      A list value may also be subscripted like a normal    array.
  786.  
  787.  
  788.  
  789. Page 12                  Nixdorf TARGON Operating System
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.              Printed August 7, 1992
  797. PERL(1)
  798.  
  799.  
  800.  
  801.      Examples:
  802.  
  803.       $time    = (stat($file))[8];    # stat returns array value
  804.       $digit = ('a','b','c','d','e','f')[$digit-10];
  805.       return (pop(@foo),pop(@foo))[0];
  806.  
  807.  
  808.      Array lists may be    assigned to if and only    if each    element
  809.      of    the list is an lvalue:
  810.  
  811.      ($a, $b, $c) =    (1, 2, 3);
  812.  
  813.      ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
  814.  
  815.      The final element may be an array or an associative array:
  816.  
  817.      ($a, $b, @rest) = split;
  818.      local($a, $b, %rest) =    @_;
  819.  
  820.      You can actually put an array anywhere in the list, but the
  821.      first array in the    list will soak up all the values, and
  822.      anything after it will get    a null value.  This may    be useful
  823.      in    a local().
  824.  
  825.      An    associative array literal contains pairs of values to be
  826.      interpreted as a key and a    value:
  827.  
  828.      # same    as map assignment above
  829.      %map =    ('red',0x00f,'blue',0x0f0,'green',0xf00);
  830.  
  831.      Array assignment in a scalar context returns the number of
  832.      elements produced by the expression on the    right side of the
  833.      assignment:
  834.  
  835.       $x = (($foo,$bar) = (3,2,1));    # set $x to 3, not 2
  836.  
  837.  
  838.      There are several other pseudo-literals that you should know
  839.      about.  If    a string is enclosed by    backticks (grave
  840.      accents), it first    undergoes variable substitution    just like
  841.      a double quoted string.  It is then interpreted as    a
  842.      command, and the output of    that command is    the value of the
  843.      pseudo-literal, like in a shell.  In a scalar context, a
  844.      single string consisting of all the output    is returned.  In
  845.      an    array context, an array    of values is returned, one for
  846.      each line of output.  (You    can set    $/ to use a different
  847.      line terminator.)    The command is executed    each time the
  848.      pseudo-literal is evaluated.  The status value of the
  849.      command is    returned in $? (see Predefined Names for the
  850.      interpretation of $?).  Unlike in csh, no translation is
  851.      done on the return    data--newlines remain newlines.     Unlike
  852.  
  853.  
  854.  
  855. Page 13                  Nixdorf TARGON Operating System
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.              Printed August 7, 1992
  863. PERL(1)
  864.  
  865.  
  866.  
  867.      in    any of the shells, single quotes do not    hide variable
  868.      names in the command from interpretation.    To pass    a $
  869.      through to    the shell you need to hide it with a backslash.
  870.  
  871.      Evaluating    a filehandle in    angle brackets yields the next
  872.      line from that file (newline included, so it's never false
  873.      until EOF,    at which time an undefined value is returned).
  874.      Ordinarily    you must assign    that value to a    variable, but
  875.      there is one situation where an automatic assignment
  876.      happens.  If (and only if)    the input symbol is the    only
  877.      thing inside the conditional of a while loop, the value is
  878.      automatically assigned to the variable "$_".  (This may seem
  879.      like an odd thing to you, but you'll use the construct in
  880.      almost every perl script you write.)  Anyway, the following
  881.      lines are equivalent to each other:
  882.  
  883.      while ($_ = <STDIN>) {    print; }
  884.      while (<STDIN>) { print; }
  885.      for (;<STDIN>;) { print; }
  886.      print while $_    = <STDIN>;
  887.      print while <STDIN>;
  888.  
  889.      The filehandles STDIN, STDOUT and STDERR are predefined.
  890.      (The filehandles stdin, stdout and    stderr will also work
  891.      except in packages, where they would be interpreted as local
  892.      identifiers rather    than global.)  Additional filehandles may
  893.      be    created    with the open function.
  894.  
  895.      If    a <FILEHANDLE> is used in a context that is looking for
  896.      an    array, an array    consisting of all the input lines is
  897.      returned, one line    per array element.  It's easy to make a
  898.      LARGE data    space this way,    so use with care.
  899.  
  900.      The null filehandle <> is special and can be used to emulate
  901.      the behavior of sed and awk.  Input from <> comes either
  902.      from standard input, or from each file listed on the command
  903.      line.  Here's how it works: the first time    <> is evaluated,
  904.      the ARGV array is checked,    and if it is null, $ARGV[0] is
  905.      set to '-', which when opened gives you standard input.  The
  906.      ARGV array    is then    processed as a list of filenames.  The
  907.      loop
  908.  
  909.       while    (<>) {
  910.            ...          #    code for each line
  911.       }
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921. Page 14                  Nixdorf TARGON Operating System
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.              Printed August 7, 1992
  929. PERL(1)
  930.  
  931.  
  932.  
  933.      is    equivalent to the following Perl-like pseudo code:
  934.  
  935.       unshift(@ARGV, '-') if $#ARGV    < $[;
  936.       while    ($ARGV = shift)    {
  937.            open(ARGV, $ARGV);
  938.            while (<ARGV>) {
  939.             ...          #    code for each line
  940.            }
  941.       }
  942.  
  943.      except that it isn't as cumbersome    to say,    and will actually
  944.      work.  It really does shift array ARGV and    put the    current
  945.      filename into variable ARGV.  It also uses    filehandle ARGV
  946.      internally--<> is just a synonym for <ARGV>, which    is
  947.      magical.  (The pseudo code    above doesn't work because it
  948.      treats <ARGV> as non-magical.)
  949.  
  950.      You can modify @ARGV before the first <> as long as the
  951.      array ends    up containing the list of filenames you    really
  952.      want.  Line numbers ($.) continue as if the input was one
  953.      big happy file.  (But see example under eof for how to reset
  954.      line numbers on each file.)
  955.  
  956.      If    you want to set    @ARGV to your own list of files, go right
  957.      ahead.  If    you want to pass switches into your script, you
  958.      can put a loop on the front like this:
  959.  
  960.       while    ($_ = $ARGV[0],    /^-/) {
  961.            shift;
  962.           last if /^--$/;
  963.            /^-D(.*)/ && ($debug = $1);
  964.            /^-v/ &&    $verbose++;
  965.            ...     # other switches
  966.       }
  967.       while    (<>) {
  968.            ...     # code    for each line
  969.       }
  970.  
  971.      The <> symbol will    return FALSE only once.     If you    call it
  972.      again after this it will assume you are processing    another
  973.      @ARGV list, and if    you haven't set    @ARGV, will input from
  974.      STDIN.
  975.  
  976.      If    the string inside the angle brackets is    a reference to a
  977.      scalar variable (e.g. <$foo>), then that variable contains
  978.      the name of the filehandle    to input from.
  979.  
  980.      If    the string inside angle    brackets is not    a filehandle, it
  981.      is    interpreted as a filename pattern to be    globbed, and
  982.      either an array of    filenames or the next filename in the
  983.      list is returned, depending on context.  One level    of $
  984.  
  985.  
  986.  
  987. Page 15                  Nixdorf TARGON Operating System
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.              Printed August 7, 1992
  995. PERL(1)
  996.  
  997.  
  998.  
  999.      interpretation is done first, but you can't say <$foo>
  1000.      because that's an indirect    filehandle as explained    in the
  1001.      previous paragraph.  You could insert curly brackets to
  1002.      force interpretation as a filename    glob: <${foo}>.     Example:
  1003.  
  1004.       while    (<*.c>)    {
  1005.            chmod 0644, $_;
  1006.       }
  1007.  
  1008.      is    equivalent to
  1009.  
  1010.       open(foo, "echo *.c |    tr -s '    \t\r\f'    '\\012\\012\\012\\012'|");
  1011.       while    (<foo>)    {
  1012.            chop;
  1013.            chmod 0644, $_;
  1014.       }
  1015.  
  1016.      In    fact, it's currently implemented that way.  (Which means
  1017.      it    will not work on filenames with    spaces in them unless you
  1018.      have /bin/csh on your machine.)  Of course, the shortest way
  1019.      to    do the above is:
  1020.  
  1021.       chmod    0644, <*.c>;
  1022.  
  1023.  
  1024.      Syntax
  1025.  
  1026.      A perl script consists of a sequence of declarations and
  1027.      commands.    The only things    that need to be    declared in perl
  1028.      are report    formats    and subroutines.  See the sections below
  1029.      for more information on those declarations.  All
  1030.      uninitialized user-created    objects    are assumed to start with
  1031.      a null or 0 value until they are defined by some explicit
  1032.      operation such as assignment.  The    sequence of commands is
  1033.      executed just once, unlike    in sed and awk scripts,    where the
  1034.      sequence of commands is executed for each input line.  While
  1035.      this means    that you must explicitly loop over the lines of
  1036.      your input    file (or files), it also means you have    much more
  1037.      control over which    files and which    lines you look at.
  1038.      (Actually,    I'm lying--it is possible to do    an implicit loop
  1039.      with either the -n    or -p switch.)
  1040.  
  1041.      A declaration can be put anywhere a command can, but has no
  1042.      effect on the execution of    the primary sequence of
  1043.      commands--declarations all    take effect at compile time.
  1044.      Typically all the declarations are    put at the beginning or
  1045.      the end of    the script.
  1046.  
  1047.      Perl is, for the most part, a free-form language.    (The only
  1048.      exception to this is format declarations, for fairly obvious
  1049.      reasons.)    Comments are indicated by the #    character, and
  1050.  
  1051.  
  1052.  
  1053. Page 16                  Nixdorf TARGON Operating System
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.              Printed August 7, 1992
  1061. PERL(1)
  1062.  
  1063.  
  1064.  
  1065.      extend to the end of the line.  If    you attempt to use /* */
  1066.      C comments, it will be interpreted    either as division or
  1067.      pattern matching, depending on the    context.  So don't do
  1068.      that.
  1069.  
  1070.      Compound statements
  1071.  
  1072.      In    perl, a    sequence of commands may be treated as one
  1073.      command by    enclosing it in    curly brackets.     We will call
  1074.      this a BLOCK.
  1075.  
  1076.      The following compound commands may be used to control flow:
  1077.  
  1078.       if (EXPR) BLOCK
  1079.       if (EXPR) BLOCK else BLOCK
  1080.       if (EXPR) BLOCK elsif    (EXPR) BLOCK ... else BLOCK
  1081.       LABEL    while (EXPR) BLOCK
  1082.       LABEL    while (EXPR) BLOCK continue BLOCK
  1083.       LABEL    for (EXPR; EXPR; EXPR) BLOCK
  1084.       LABEL    foreach    VAR (ARRAY) BLOCK
  1085.       LABEL    BLOCK continue BLOCK
  1086.  
  1087.      Note that,    unlike C and Pascal, these are defined in terms
  1088.      of    BLOCKs,    not statements.     This means that the curly
  1089.      brackets are required--no dangling    statements allowed.  If
  1090.      you want to write conditionals without curly brackets there
  1091.      are several other ways to do it.  The following all do the
  1092.      same thing:
  1093.  
  1094.       if (!open(foo)) { die    "Can't open $foo: $!"; }
  1095.       die "Can't open $foo:    $!" unless open(foo);
  1096.       open(foo) || die "Can't open $foo: $!"; # foo    or bust!
  1097.       open(foo) ? 'hi mom' : die "Can't open $foo: $!";
  1098.              # a bit exotic, that last one
  1099.  
  1100.  
  1101.      The if statement is straightforward.  Since BLOCKs    are
  1102.      always bounded by curly brackets, there is    never any
  1103.      ambiguity about which if an else goes with.  If you use
  1104.      unless in place of    if, the    sense of the test is reversed.
  1105.  
  1106.      The while statement executes the block as long as the
  1107.      expression    is true    (does not evaluate to the null string or
  1108.      0).  The LABEL is optional, and if    present, consists of an
  1109.      identifier    followed by a colon.  The LABEL    identifies the
  1110.      loop for the loop control statements next,    last, and redo
  1111.      (see below).  If there is a continue BLOCK, it is always
  1112.      executed just before the conditional is about to be
  1113.      evaluated again, similarly    to the third part of a for loop
  1114.      in    C.  Thus it can    be used    to increment a loop variable,
  1115.      even when the loop    has been continued via the next    statement
  1116.  
  1117.  
  1118.  
  1119. Page 17                  Nixdorf TARGON Operating System
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.              Printed August 7, 1992
  1127. PERL(1)
  1128.  
  1129.  
  1130.  
  1131.      (similar to the C "continue" statement).
  1132.  
  1133.      If    the word while is replaced by the word until, the sense
  1134.      of    the test is reversed, but the conditional is still tested
  1135.      before the    first iteration.
  1136.  
  1137.      In    either the if or the while statement, you may replace
  1138.      "(EXPR)" with a BLOCK, and    the conditional    is true    if the
  1139.      value of the last command in that block is    true.
  1140.  
  1141.      The for loop works    exactly    like the corresponding while
  1142.      loop:
  1143.  
  1144.       for ($i = 1; $i < 10;    $i++) {
  1145.            ...
  1146.       }
  1147.  
  1148.      is    the same as
  1149.  
  1150.       $i = 1;
  1151.       while    ($i < 10) {
  1152.            ...
  1153.       } continue {
  1154.            $i++;
  1155.       }
  1156.  
  1157.      The foreach loop iterates over a normal array value and sets
  1158.      the variable VAR to be each element of the    array in turn.
  1159.      The variable is implicitly    local to the loop, and regains
  1160.      its former    value upon exiting the loop.  The "foreach"
  1161.      keyword is    actually identical to the "for"    keyword, so you
  1162.      can use "foreach" for readability or "for"    for brevity.  If
  1163.      VAR is omitted, $_    is set to each value.  If ARRAY    is an
  1164.      actual array (as opposed to an expression returning an array
  1165.      value), you can modify each element of the    array by
  1166.      modifying VAR inside the loop.  Examples:
  1167.  
  1168.       for (@ary) { s/foo/bar/; }
  1169.  
  1170.       foreach $elem    (@elements) {
  1171.            $elem *=    2;
  1172.       }
  1173.  
  1174.       for ((10,9,8,7,6,5,4,3,2,1,'BOOM')) {
  1175.            print $_, "\n"; sleep(1);
  1176.       }
  1177.  
  1178.       for (1..15) {    print "Merry Christmas\n"; }
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185. Page 18                  Nixdorf TARGON Operating System
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.              Printed August 7, 1992
  1193. PERL(1)
  1194.  
  1195.  
  1196.  
  1197.       foreach $item    (split(/:[\\\n:]*/, $ENV{'TERMCAP'})) {
  1198.            print "Item: $item\n";
  1199.       }
  1200.  
  1201.  
  1202.      The BLOCK by itself (labeled or not) is equivalent    to a loop
  1203.      that executes once.  Thus you can use any of the loop
  1204.      control statements    in it to leave or restart the block.  The
  1205.      continue block is optional.  This construct is particularly
  1206.      nice for doing case structures.
  1207.  
  1208.       foo: {
  1209.            if (/^abc/) { $abc = 1; last foo; }
  1210.            if (/^def/) { $def = 1; last foo; }
  1211.            if (/^xyz/) { $xyz = 1; last foo; }
  1212.            $nothing    = 1;
  1213.       }
  1214.  
  1215.      There is no official switch statement in perl, because there
  1216.      are already several ways to write the equivalent.    In
  1217.      addition to the above, you    could write
  1218.  
  1219.       foo: {
  1220.            $abc = 1, last foo  if /^abc/;
  1221.            $def = 1, last foo  if /^def/;
  1222.            $xyz = 1, last foo  if /^xyz/;
  1223.            $nothing    = 1;
  1224.       }
  1225.  
  1226.      or
  1227.  
  1228.       foo: {
  1229.            /^abc/ && do { $abc = 1;    last foo; };
  1230.            /^def/ && do { $def = 1;    last foo; };
  1231.            /^xyz/ && do { $xyz = 1;    last foo; };
  1232.            $nothing    = 1;
  1233.       }
  1234.  
  1235.      or
  1236.  
  1237.       foo: {
  1238.            /^abc/ && ($abc = 1, last foo);
  1239.            /^def/ && ($def = 1, last foo);
  1240.            /^xyz/ && ($xyz = 1, last foo);
  1241.            $nothing    = 1;
  1242.       }
  1243.  
  1244.      or    even
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251. Page 19                  Nixdorf TARGON Operating System
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.              Printed August 7, 1992
  1259. PERL(1)
  1260.  
  1261.  
  1262.  
  1263.       if (/^abc/)
  1264.            { $abc =    1; }
  1265.       elsif    (/^def/)
  1266.            { $def =    1; }
  1267.       elsif    (/^xyz/)
  1268.            { $xyz =    1; }
  1269.       else
  1270.            {$nothing = 1;}
  1271.  
  1272.      As    it happens, these are all optimized internally to a
  1273.      switch structure, so perl jumps directly to the desired
  1274.      statement,    and you    needn't    worry about perl executing a lot
  1275.      of    unnecessary statements when you    have a string of 50
  1276.      elsifs, as    long as    you are    testing    the same simple    scalar
  1277.      variable using ==,    eq, or pattern matching    as above.  (If
  1278.      you're curious as to whether the optimizer    has done this for
  1279.      a particular case statement, you can use the -D1024 switch
  1280.      to    list the syntax    tree before execution.)
  1281.  
  1282.      Simple statements
  1283.  
  1284.      The only kind of simple statement is an expression    evaluated
  1285.      for its side effects.  Every simple statement must    be
  1286.      terminated    with a semicolon, unless it is the final
  1287.      statement in a block, in which case the semicolon is
  1288.      optional.    (Semicolon is still encouraged there if    the block
  1289.      takes up more than    one line).
  1290.  
  1291.      Any simple    statement may optionally be followed by    a single
  1292.      modifier, just before the terminating semicolon.  The
  1293.      possible modifiers    are:
  1294.  
  1295.       if EXPR
  1296.       unless EXPR
  1297.       while    EXPR
  1298.       until    EXPR
  1299.  
  1300.      The if and    unless modifiers have the expected semantics.
  1301.      The while and until modifiers also    have the expected
  1302.      semantics (conditional evaluated first), except when applied
  1303.      to    a do-BLOCK or a    do-SUBROUTINE command, in which    case the
  1304.      block executes once before    the conditional    is evaluated.
  1305.      This is so    that you can write loops like:
  1306.  
  1307.       do {
  1308.            $_ = <STDIN>;
  1309.            ...
  1310.       } until $_ eq    ".\n";
  1311.  
  1312.      (See the do operator below.  Note also that the loop control
  1313.      commands described    later will NOT work in this construct,
  1314.  
  1315.  
  1316.  
  1317. Page 20                  Nixdorf TARGON Operating System
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.              Printed August 7, 1992
  1325. PERL(1)
  1326.  
  1327.  
  1328.  
  1329.      since modifiers don't take    loop labels.  Sorry.)
  1330.  
  1331.      Expressions
  1332.  
  1333.      Since perl    expressions work almost    exactly    like C
  1334.      expressions, only the differences will be mentioned here.
  1335.  
  1336.      Here's what perl has that C doesn't:
  1337.  
  1338.      **         The exponentiation    operator.
  1339.  
  1340.      **=     The exponentiation    assignment operator.
  1341.  
  1342.      ()         The null list, used to initialize an array    to null.
  1343.  
  1344.      .         Concatenation of two strings.
  1345.  
  1346.      .=         The concatenation assignment operator.
  1347.  
  1348.      eq         String equality (== is numeric equality).    For a
  1349.          mnemonic just think of "eq" as a string.  (If you
  1350.          are used to the awk behavior of using == for either
  1351.          string or numeric equality    based on the current form
  1352.          of    the comparands,    beware!     You must be explicit
  1353.          here.)
  1354.  
  1355.      ne         String inequality (!= is numeric inequality).
  1356.  
  1357.      lt         String less than.
  1358.  
  1359.      gt         String greater than.
  1360.  
  1361.      le         String less than or equal.
  1362.  
  1363.      ge         String greater than or equal.
  1364.  
  1365.      cmp     String comparison,    returning -1, 0, or 1.
  1366.  
  1367.      <=>     Numeric comparison, returning -1, 0, or 1.
  1368.  
  1369.      =~         Certain operations    search or modify the string "$_"
  1370.          by    default.  This operator    makes that kind    of
  1371.          operation work on some other string.  The right
  1372.          argument is a search pattern, substitution, or
  1373.          translation.  The left argument is    what is    supposed
  1374.          to    be searched, substituted, or translated    instead
  1375.          of    the default "$_".  The return value indicates the
  1376.          success of    the operation.    (If the    right argument is
  1377.          an    expression other than a    search pattern,
  1378.          substitution, or translation, it is interpreted as    a
  1379.          search pattern at run time.  This is less efficient
  1380.  
  1381.  
  1382.  
  1383. Page 21                  Nixdorf TARGON Operating System
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.              Printed August 7, 1992
  1391. PERL(1)
  1392.  
  1393.  
  1394.  
  1395.          than an explicit search, since the    pattern    must be
  1396.          compiled every time the expression    is evaluated.)
  1397.          The precedence of this operator is    lower than unary
  1398.          minus and autoincrement/decrement,    but higher than
  1399.          everything    else.
  1400.  
  1401.      !~         Just like =~ except the return value is negated.
  1402.  
  1403.      x         The repetition operator.  Returns a string
  1404.          consisting    of the left operand repeated the number
  1405.          of    times specified    by the right operand.  In an
  1406.          array context, if the left    operand    is a list in
  1407.          parens, it    repeats    the list.
  1408.  
  1409.           print    '-' x 80;       # print row of dashes
  1410.           print    '-' x80;      #    illegal, x80 is    identifier
  1411.  
  1412.           print    "\t" x ($tab/8), ' ' x ($tab%8);  # tab    over
  1413.  
  1414.           @ones    = (1) x    80;       # an    array of 80 1's
  1415.           @ones    = (5) x    @ones;        # set all elements to 5
  1416.  
  1417.  
  1418.      x=         The repetition assignment operator.  Only works on
  1419.          scalars.
  1420.  
  1421.      ..         The range operator, which is really two different
  1422.          operators depending on the    context.  In an    array
  1423.          context, returns an array of values counting (by
  1424.          ones) from    the left value to the right value.  This
  1425.          is    useful for writing "for    (1..10)" loops and for
  1426.          doing slice operations on arrays.
  1427.  
  1428.          In    a scalar context, .. returns a boolean value.
  1429.          The operator is bistable, like a flip-flop, and
  1430.          emulates the line-range (comma) operator of sed,
  1431.          awk, and various editors.    Each ..    operator
  1432.          maintains its own boolean state.  It is false as
  1433.          long as its left operand is false.     Once the left
  1434.          operand is    true, the range    operator stays true until
  1435.          the right operand is true,    AFTER which the    range
  1436.          operator becomes false again.  (It    doesn't    become
  1437.          false till    the next time the range    operator is
  1438.          evaluated.     It can    test the right operand and become
  1439.          false on the same evaluation it became true (as in
  1440.          awk), but it still    returns    true once.  If you don't
  1441.          want it to    test the right operand till the    next
  1442.          evaluation    (as in sed), use three dots (...) instead
  1443.          of    two.)  The right operand is not    evaluated while
  1444.          the operator is in    the "false" state, and the left
  1445.          operand is    not evaluated while the    operator is in
  1446.  
  1447.  
  1448.  
  1449. Page 22                  Nixdorf TARGON Operating System
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.              Printed August 7, 1992
  1457. PERL(1)
  1458.  
  1459.  
  1460.  
  1461.          the "true"    state.    The precedence is a little lower
  1462.          than || and &&.  The value    returned is either the
  1463.          null string for false, or a sequence number
  1464.          (beginning    with 1)    for true.  The sequence    number is
  1465.          reset for each range encountered.    The final
  1466.          sequence number in    a range    has the    string 'E0'
  1467.          appended to it, which doesn't affect its numeric
  1468.          value, but    gives you something to search for if you
  1469.          want to exclude the endpoint.  You    can exclude the
  1470.          beginning point by    waiting    for the    sequence number
  1471.          to    be greater than    1.  If either operand of scalar
  1472.          ..    is static, that    operand    is implicitly compared to
  1473.          the $. variable, the current line number.    Examples:
  1474.  
  1475.          As    a scalar operator:
  1476.          if (101 .. 200) { print; }    # print    2nd hundred lines
  1477.  
  1478.          next line if (1 .. /^$/); # skip header lines
  1479.  
  1480.          s/^/> / if (/^$/ .. eof());    # quote    body
  1481.  
  1482.          As    an array operator:
  1483.          for (101 .. 200) { print; }    # print    $_ 100 times
  1484.  
  1485.          @foo =    @foo[$[    .. $#foo]; # an    expensive no-op
  1486.          @foo =    @foo[$#foo-4 ..    $#foo];    # slice    last 5 items
  1487.  
  1488.  
  1489.      -x         A file test.  This    unary operator takes one
  1490.          argument, either a    filename or a filehandle, and
  1491.          tests the associated file to see if something is
  1492.          true about    it.  If    the argument is    omitted, tests
  1493.          $_, except    for -t,    which tests STDIN.  It returns 1
  1494.          for true and '' for false,    or the undefined value if
  1495.          the file doesn't exist.  Precedence is higher than
  1496.          logical and relational operators, but lower than
  1497.          arithmetic    operators.  The    operator may be    any of:
  1498.           -r   File is readable    by effective uid/gid.
  1499.           -w   File is writable    by effective uid/gid.
  1500.           -x   File is executable by effective uid/gid.
  1501.           -o   File is owned by    effective uid.
  1502.           -R   File is readable    by real    uid/gid.
  1503.           -W   File is writable    by real    uid/gid.
  1504.           -X   File is executable by real uid/gid.
  1505.           -O   File is owned by    real uid.
  1506.           -e   File exists.
  1507.           -z   File has    zero size.
  1508.           -s   File has    non-zero size (returns size).
  1509.           -f   File is a plain file.
  1510.           -d   File is a directory.
  1511.           -l   File is a symbolic link.
  1512.  
  1513.  
  1514.  
  1515. Page 23                  Nixdorf TARGON Operating System
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.              Printed August 7, 1992
  1523. PERL(1)
  1524.  
  1525.  
  1526.  
  1527.           -p   File is a named pipe (FIFO).
  1528.           -S   File is a socket.
  1529.           -b   File is a block special file.
  1530.           -c   File is a character special file.
  1531.           -u   File has    setuid bit set.
  1532.           -g   File has    setgid bit set.
  1533.           -k   File has    sticky bit set.
  1534.           -t   Filehandle is opened to a tty.
  1535.           -T   File is a text file.
  1536.           -B   File is a binary    file (opposite of -T).
  1537.           -M   Age of file in days when    script started.
  1538.           -A   Same for    access time.
  1539.           -C   Same for    inode change time.
  1540.  
  1541.          The interpretation    of the file permission operators
  1542.          -r, -R, -w, -W, -x    and -X is based    solely on the
  1543.          mode of the file and the uids and gids of the user.
  1544.          There may be other    reasons    you can't actually read,
  1545.          write or execute the file.     Also note that, for the
  1546.          superuser,    -r, -R,    -w and -W always return    1, and -x
  1547.          and -X return 1 if    any execute bit    is set in the
  1548.          mode.  Scripts run    by the superuser may thus need to
  1549.          do    a stat() in order to determine the actual mode of
  1550.          the file, or temporarily set the uid to something
  1551.          else.
  1552.  
  1553.          Example:
  1554.  
  1555.           while    (<>) {
  1556.                chop;
  1557.                next unless -f $_;  # ignore specials
  1558.                ...
  1559.           }
  1560.  
  1561.          Note that -s/a/b/ does not    do a negated
  1562.          substitution.  Saying -exp($foo) still works as
  1563.          expected, however--only single letters following a
  1564.          minus are interpreted as file tests.
  1565.  
  1566.          The -T and    -B switches work as follows.  The first
  1567.          block or so of the    file is    examined for odd
  1568.          characters    such as    strange    control    codes or
  1569.          metacharacters.  If too many odd characters (>10%)
  1570.          are found,    it's a -B file,    otherwise it's a -T file.
  1571.          Also, any file containing null in the first block is
  1572.          considered    a binary file.    If -T or -B is used on a
  1573.          filehandle, the current stdio buffer is examined
  1574.          rather than the first block.  Both    -T and -B return
  1575.          TRUE on a null file, or a file at EOF when    testing    a
  1576.          filehandle.
  1577.  
  1578.  
  1579.  
  1580.  
  1581. Page 24                  Nixdorf TARGON Operating System
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.              Printed August 7, 1992
  1589. PERL(1)
  1590.  
  1591.  
  1592.  
  1593.      If    any of the file    tests (or either stat operator)    are given
  1594.      the special filehandle consisting of a solitary underline,
  1595.      then the stat structure of    the previous file test (or stat
  1596.      operator) is used,    saving a system    call.  (This doesn't work
  1597.      with -t, and you need to remember that lstat and -l will
  1598.      leave values in the stat structure    for the    symbolic link,
  1599.      not the real file.)  Example:
  1600.  
  1601.       print    "Can do.\n" if -r $a ||    -w _ ||    -x _;
  1602.  
  1603.       stat($filename);
  1604.       print    "Readable\n" if    -r _;
  1605.       print    "Writable\n" if    -w _;
  1606.       print    "Executable\n" if -x _;
  1607.       print    "Setuid\n" if -u _;
  1608.       print    "Setgid\n" if -g _;
  1609.       print    "Sticky\n" if -k _;
  1610.       print    "Text\n" if -T _;
  1611.       print    "Binary\n" if -B _;
  1612.  
  1613.  
  1614.      Here is what C has    that perl doesn't:
  1615.  
  1616.      unary &     Address-of operator.
  1617.  
  1618.      unary *     Dereference-address operator.
  1619.  
  1620.      (TYPE)     Type casting operator.
  1621.  
  1622.      Like C, perl does a certain amount    of expression evaluation
  1623.      at    compile    time, whenever it determines that all of the
  1624.      arguments to an operator are static and have no side
  1625.      effects.  In particular, string concatenation happens at
  1626.      compile time between literals that    don't do variable
  1627.      substitution.  Backslash interpretation also happens at
  1628.      compile time.  You    can say
  1629.  
  1630.       'Now is the time for all' . "\n" .
  1631.       'good    men to come to.'
  1632.  
  1633.      and this all reduces to one string    internally.
  1634.  
  1635.      The autoincrement operator    has a little extra built-in magic
  1636.      to    it.  If    you increment a    variable that is numeric, or that
  1637.      has ever been used    in a numeric context, you get a    normal
  1638.      increment.     If, however, the variable has only been used in
  1639.      string contexts since it was set, and has a value that is
  1640.      not null and matches the pattern /^[a-zA-Z]*[0-9]*$/, the
  1641.      increment is done as a string, preserving each character
  1642.      within its    range, with carry:
  1643.  
  1644.  
  1645.  
  1646.  
  1647. Page 25                  Nixdorf TARGON Operating System
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.              Printed August 7, 1992
  1655. PERL(1)
  1656.  
  1657.  
  1658.  
  1659.       print    ++($foo    = '99');   # prints '100'
  1660.       print    ++($foo    = 'a0');   # prints 'a1'
  1661.       print    ++($foo    = 'Az');   # prints 'Ba'
  1662.       print    ++($foo    = 'zz');   # prints 'aaa'
  1663.  
  1664.      The autodecrement is not magical.
  1665.  
  1666.      The range operator    (in an array context) makes use    of the
  1667.      magical autoincrement algorithm if    the minimum and    maximum
  1668.      are strings.  You can say
  1669.  
  1670.       @alphabet = ('A' .. 'Z');
  1671.  
  1672.      to    get all    the letters of the alphabet, or
  1673.  
  1674.       $hexdigit = (0 .. 9, 'a' .. 'f')[$num    & 15];
  1675.  
  1676.      to    get a hexadecimal digit, or
  1677.  
  1678.       @z2 =    ('01' .. '31');     print @z2[$mday];
  1679.  
  1680.      to    get dates with leading zeros.  (If the final value
  1681.      specified is not in the sequence that the magical increment
  1682.      would produce, the    sequence goes until the    next value would
  1683.      be    longer than the    final value specified.)
  1684.  
  1685.      The || and    && operators differ from C's in    that, rather than
  1686.      returning 0 or 1, they return the last value evaluated.
  1687.      Thus, a portable way to find out the home directory might
  1688.      be:
  1689.  
  1690.       $home    = $ENV{'HOME'} || $ENV{'LOGDIR'} ||
  1691.           (getpwuid($<))[7]    || die "You're homeless!\n";
  1692.  
  1693.  
  1694.      Along with    the literals and variables mentioned earlier, the
  1695.      operations    in the following section can serve as terms in an
  1696.      expression.  Some of these    operations take    a LIST as an
  1697.      argument.    Such a list can    consist    of any combination of
  1698.      scalar arguments or array values; the array values    will be
  1699.      included in the list as if    each individual    element    were
  1700.      interpolated at that point    in the list, forming a longer
  1701.      single-dimensional    array value.  Elements of the LIST should
  1702.      be    separated by commas.  If an operation is listed    both with
  1703.      and without parentheses around its    arguments, it means you
  1704.      can either    use it as a unary operator or as a function call.
  1705.      To    use it as a function call, the next token on the same
  1706.      line must be a left parenthesis.  (There may be intervening
  1707.      white space.)  Such a function then has highest precedence,
  1708.      as    you would expect from a    function.  If any token    other
  1709.      than a left parenthesis follows, then it is a unary
  1710.  
  1711.  
  1712.  
  1713. Page 26                  Nixdorf TARGON Operating System
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.              Printed August 7, 1992
  1721. PERL(1)
  1722.  
  1723.  
  1724.  
  1725.      operator, with a precedence depending only    on whether it is
  1726.      a LIST operator or    not.  LIST operators have lowest
  1727.      precedence.  All other unary operators have a precedence
  1728.      greater than relational operators but less    than arithmetic
  1729.      operators.     See the section on Precedence.
  1730.  
  1731.      For operators that    can be used in either a    scalar or array
  1732.      context, failure is generally indicated in    a scalar context
  1733.      by    returning the undefined    value, and in an array context by
  1734.      returning the null    list.  Remember    though that THERE IS NO
  1735.      GENERAL RULE FOR CONVERTING A LIST    INTO A SCALAR.    Each
  1736.      operator decides which sort of scalar it would be most
  1737.      appropriate to return.  Some operators return the length of
  1738.      the list that would have been returned in an array    context.
  1739.      Some operators return the first value in the list.     Some
  1740.      operators return the last value in    the list.  Some    operators
  1741.      return a count of successful operations.  In general, they
  1742.      do    what you want, unless you want consistency.
  1743.  
  1744.      /PATTERN/
  1745.          See m/PATTERN/.
  1746.  
  1747.      ?PATTERN?
  1748.          This is just like the /pattern/ search, except that
  1749.          it    matches    only once between calls    to the reset
  1750.          operator.    This is    a useful optimization when you
  1751.          only want to see the first    occurrence of something
  1752.          in    each file of a set of files, for instance.  Only
  1753.          ??    patterns local to the current package are reset.
  1754.  
  1755.      accept(NEWSOCKET,GENERICSOCKET)
  1756.          Does the same thing that the accept system    call
  1757.          does.  Returns true if it succeeded, false
  1758.          otherwise.     See example in    section    on Interprocess
  1759.          Communication.
  1760.  
  1761.      alarm(SECONDS)
  1762.  
  1763.      alarm SECONDS
  1764.          Arranges to have a    SIGALRM    delivered to this process
  1765.          after the specified number    of seconds (minus 1,
  1766.          actually) have elapsed.  Thus, alarm(15) will cause
  1767.          a SIGALRM at some point more than 14 seconds in the
  1768.          future.  Only one timer may be counting at    once.
  1769.          Each call disables    the previous timer, and    an
  1770.          argument of 0 may be supplied to cancel the previous
  1771.          timer without starting a new one.    The returned
  1772.          value is the amount of time remaining on the
  1773.          previous timer.
  1774.  
  1775.      atan2(Y,X)
  1776.  
  1777.  
  1778.  
  1779. Page 27                  Nixdorf TARGON Operating System
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.              Printed August 7, 1992
  1787. PERL(1)
  1788.  
  1789.  
  1790.  
  1791.          Returns the arctangent of Y/X in the range    -PI to
  1792.          PI.
  1793.  
  1794.      bind(SOCKET,NAME)
  1795.          Does the same thing that the bind system call does.
  1796.          Returns true if it    succeeded, false otherwise.  NAME
  1797.          should be a packed    address    of the proper type for
  1798.          the socket.  See example in section on Interprocess
  1799.          Communication.
  1800.  
  1801.      binmode(FILEHANDLE)
  1802.  
  1803.      binmode FILEHANDLE
  1804.          Arranges for the file to be read in "binary" mode in
  1805.          operating systems that distinguish    between    binary
  1806.          and text files.  Files that are not read in binary
  1807.          mode have CR LF sequences translated to LF    on input
  1808.          and LF translated to CR LF    on output.  Binmode has
  1809.          no    effect under Unix.  If FILEHANDLE is an
  1810.          expression, the value is taken as the name    of the
  1811.          filehandle.
  1812.  
  1813.      caller(EXPR)
  1814.  
  1815.      caller  Returns the context of the    current    subroutine call:
  1816.  
  1817.           ($package,$filename,$line) = caller;
  1818.  
  1819.          With EXPR,    returns    some extra information that the
  1820.          debugger uses to print a stack trace.  The    value of
  1821.          EXPR indicates how    many call frames to go back
  1822.          before the    current    one.
  1823.  
  1824.      chdir(EXPR)
  1825.  
  1826.      chdir EXPR
  1827.          Changes the working directory to EXPR, if possible.
  1828.          If    EXPR is    omitted, changes to home directory.
  1829.          Returns 1 upon success, 0 otherwise.  See example
  1830.          under die.
  1831.  
  1832.      chmod(LIST)
  1833.  
  1834.      chmod LIST
  1835.          Changes the permissions of    a list of files.  The
  1836.          first element of the list must be the numerical
  1837.          mode.  Returns the    number of files    successfully
  1838.          changed.
  1839.  
  1840.           $cnt = chmod 0755, 'foo', 'bar';
  1841.           chmod    0755, @executables;
  1842.  
  1843.  
  1844.  
  1845. Page 28                  Nixdorf TARGON Operating System
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.              Printed August 7, 1992
  1853. PERL(1)
  1854.  
  1855.  
  1856.  
  1857.      chop(LIST)
  1858.  
  1859.      chop(VARIABLE)
  1860.  
  1861.      chop VARIABLE
  1862.  
  1863.      chop    Chops off the last    character of a string and returns
  1864.          the character chopped.  It's used primarily to
  1865.          remove the    newline    from the end of    an input record,
  1866.          but is much more efficient    than s/\n// because it
  1867.          neither scans nor copies the string.  If VARIABLE is
  1868.          omitted, chops $_.     Example:
  1869.  
  1870.           while    (<>) {
  1871.                chop;     # avoid \n on last field
  1872.                @array =    split(/:/);
  1873.                ...
  1874.           }
  1875.  
  1876.          You can actually chop anything that's an lvalue,
  1877.          including an assignment:
  1878.  
  1879.           chop($cwd = `pwd`);
  1880.           chop($answer = <STDIN>);
  1881.  
  1882.          If    you chop a list, each element is chopped.  Only
  1883.          the value of the last chop    is returned.
  1884.  
  1885.      chown(LIST)
  1886.  
  1887.      chown LIST
  1888.          Changes the owner (and group) of a    list of    files.
  1889.          The first two elements of the list    must be    the
  1890.          NUMERICAL uid and gid, in that order.  Returns the
  1891.          number of files successfully changed.
  1892.  
  1893.           $cnt = chown $uid, $gid, 'foo', 'bar';
  1894.           chown    $uid, $gid, @filenames;
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911. Page 29                  Nixdorf TARGON Operating System
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.              Printed August 7, 1992
  1919. PERL(1)
  1920.  
  1921.  
  1922.  
  1923.          Here's an example that looks up non-numeric uids in
  1924.          the passwd    file:
  1925.  
  1926.           print    "User: ";
  1927.           $user    = <STDIN>;
  1928.           chop($user);
  1929.           print    "Files:    "
  1930.           $pattern = <STDIN>;
  1931.           chop($pattern);
  1932.           open(pass, '/etc/passwd')
  1933.                || die "Can't open passwd: $!\n";
  1934.           while    (<pass>) {
  1935.                ($login,$pass,$uid,$gid)    = split(/:/);
  1936.                $uid{$login} = $uid;
  1937.                $gid{$login} = $gid;
  1938.           }
  1939.           @ary = <${pattern}>;       # get filenames
  1940.           if ($uid{$user} eq '') {
  1941.                die "$user not in passwd    file";
  1942.           }
  1943.           else {
  1944.                chown $uid{$user}, $gid{$user}, @ary;
  1945.           }
  1946.  
  1947.  
  1948.      chroot(FILENAME)
  1949.  
  1950.      chroot FILENAME
  1951.          Does the same as the system call of that name.  If
  1952.          you don't know what it does, don't    worry about it.
  1953.          If    FILENAME is omitted, does chroot to $_.
  1954.  
  1955.      close(FILEHANDLE)
  1956.  
  1957.      close FILEHANDLE
  1958.          Closes the    file or    pipe associated    with the file
  1959.          handle.  You don't    have to    close FILEHANDLE if you
  1960.          are immediately going to do another open on it,
  1961.          since open    will close it for you.    (See open.)
  1962.          However, an explicit close    on an input file resets
  1963.          the line counter ($.), while the implicit close done
  1964.          by    open does not.    Also, closing a    pipe will wait
  1965.          for the process executing on the pipe to complete,
  1966.          in    case you want to look at the output of the pipe
  1967.          afterwards.  Closing a pipe explicitly also puts the
  1968.          status value of the command into $?.  Example:
  1969.  
  1970.           open(OUTPUT, '|sort >foo');    # pipe to sort
  1971.           ...  # print stuff to    output
  1972.           close    OUTPUT;          #    wait for sort to finish
  1973.           open(INPUT, 'foo'); #    get sort's results
  1974.  
  1975.  
  1976.  
  1977. Page 30                  Nixdorf TARGON Operating System
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.              Printed August 7, 1992
  1985. PERL(1)
  1986.  
  1987.  
  1988.  
  1989.          FILEHANDLE    may be an expression whose value gives
  1990.          the real filehandle name.
  1991.  
  1992.      closedir(DIRHANDLE)
  1993.  
  1994.      closedir DIRHANDLE
  1995.          Closes a directory    opened by opendir().
  1996.  
  1997.      connect(SOCKET,NAME)
  1998.          Does the same thing that the connect system call
  1999.          does.  Returns true if it succeeded, false
  2000.          otherwise.     NAME should be    a package address of the
  2001.          proper type for the socket.  See example in section
  2002.          on    Interprocess Communication.
  2003.  
  2004.      cos(EXPR)
  2005.  
  2006.      cos EXPR
  2007.          Returns the cosine    of EXPR    (expressed in radians).
  2008.          If    EXPR is    omitted    takes cosine of    $_.
  2009.  
  2010.      crypt(PLAINTEXT,SALT)
  2011.          Encrypts a    string exactly like the    crypt()    function
  2012.          in    the C library.    Useful for checking the    password
  2013.          file for lousy passwords.    Only the guys wearing
  2014.          white hats    should do this.
  2015.  
  2016.      dbmclose(ASSOC_ARRAY)
  2017.  
  2018.      dbmclose ASSOC_ARRAY
  2019.          Breaks the    binding    between    a dbm file and an
  2020.          associative array.     The values remaining in the
  2021.          associative array are meaningless unless you happen
  2022.          to    want to    know what was in the cache for the dbm
  2023.          file.  This function is only useful if you    have
  2024.          ndbm.
  2025.  
  2026.      dbmopen(ASSOC,DBNAME,MODE)
  2027.          This binds    a dbm or ndbm file to an associative
  2028.          array.  ASSOC is the name of the associative array.
  2029.          (Unlike normal open, the first argument is    NOT a
  2030.          filehandle, even though it    looks like one).  DBNAME
  2031.          is    the name of the    database (without the .dir or
  2032.          .pag extension).  If the database does not    exist, it
  2033.          is    created    with protection    specified by MODE (as
  2034.          modified by the umask).  If your system only
  2035.          supports the older    dbm functions, you may perform
  2036.          only one dbmopen in your program.    If your    system
  2037.          has neither dbm nor ndbm, calling dbmopen produces    a
  2038.          fatal error.
  2039.  
  2040.  
  2041.  
  2042.  
  2043. Page 31                  Nixdorf TARGON Operating System
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.              Printed August 7, 1992
  2051. PERL(1)
  2052.  
  2053.  
  2054.  
  2055.          Values assigned to    the associative    array prior to
  2056.          the dbmopen are lost.  A certain number of    values
  2057.          from the dbm file are cached in memory.  By default
  2058.          this number is 64,    but you    can increase it    by
  2059.          preallocating that    number of garbage entries in the
  2060.          associative array before the dbmopen.  You    can flush
  2061.          the cache if necessary with the reset command.
  2062.  
  2063.          If    you don't have write access to the dbm file, you
  2064.          can only read associative array variables,    not set
  2065.          them.  If you want    to test    whether    you can    write,
  2066.          either use    file tests or try setting a dummy array
  2067.          entry inside an eval, which will trap the error.
  2068.  
  2069.          Note that functions such as keys()    and values() may
  2070.          return huge array values when used    on large dbm
  2071.          files.  You may prefer to use the each() function to
  2072.          iterate over large    dbm files.  Example:
  2073.  
  2074.           # print out history file offsets
  2075.           dbmopen(HIST,'/usr/lib/news/history',0666);
  2076.           while    (($key,$val) = each %HIST) {
  2077.                print $key, ' = ', unpack('L',$val), "\n";
  2078.           }
  2079.           dbmclose(HIST);
  2080.  
  2081.  
  2082.      defined(EXPR)
  2083.  
  2084.      defined EXPR
  2085.          Returns a boolean value saying whether the    lvalue
  2086.          EXPR has a    real value or not.  Many operations
  2087.          return the    undefined value    under exceptional
  2088.          conditions, such as end of    file, uninitialized
  2089.          variable, system error and    such.  This function
  2090.          allows you    to distinguish between an undefined null
  2091.          string and    a defined null string with operations
  2092.          that might    return a real null string, in particular
  2093.          referencing elements of an    array.    You may    also
  2094.          check to see if arrays or subroutines exist.  Use on
  2095.          predefined    variables is not guaranteed to produce
  2096.          intuitive results.     Examples:
  2097.  
  2098.           print    if defined $switch{'D'};
  2099.           print    "$val\n" while defined($val = pop(@ary));
  2100.           die "Can't readlink $sym: $!"
  2101.                unless defined($value = readlink    $sym);
  2102.           eval '@foo = ()' if defined(@foo);
  2103.           die "No XYZ package defined" unless defined %_XYZ;
  2104.           sub foo { defined &$bar ? &$bar(@_) :    die "No    bar"; }
  2105.  
  2106.  
  2107.  
  2108.  
  2109. Page 32                  Nixdorf TARGON Operating System
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.              Printed August 7, 1992
  2117. PERL(1)
  2118.  
  2119.  
  2120.  
  2121.          See also undef.
  2122.  
  2123.      delete $ASSOC{KEY}
  2124.          Deletes the specified value from the specified
  2125.          associative array.     Returns the deleted value, or
  2126.          the undefined value if nothing was    deleted.
  2127.          Deleting from $ENV{} modifies the environment.
  2128.          Deleting from an array bound to a dbm file    deletes
  2129.          the entry from the    dbm file.
  2130.  
  2131.          The following deletes all the values of an
  2132.          associative array:
  2133.  
  2134.           foreach $key (keys %ARRAY) {
  2135.                delete $ARRAY{$key};
  2136.           }
  2137.  
  2138.          (But it would be faster to    use the    reset command.
  2139.          Saying undef %ARRAY is faster yet.)
  2140.  
  2141.      die(LIST)
  2142.  
  2143.      die LIST
  2144.          Outside of    an eval, prints    the value of LIST to
  2145.          STDERR and    exits with the current value of    $!
  2146.          (errno).  If $! is    0, exits with the value    of ($? >>
  2147.          8)    (`command` status).  If    ($? >> 8) is 0,    exits
  2148.          with 255.    Inside an eval,    the error message is
  2149.          stuffed into $@ and the eval is terminated    with the
  2150.          undefined value.
  2151.  
  2152.          Equivalent    examples:
  2153.  
  2154.           die "Can't cd    to spool: $!\n"
  2155.                unless chdir '/usr/spool/news';
  2156.  
  2157.           chdir    '/usr/spool/news' || die "Can't    cd to spool: $!\n"
  2158.  
  2159.  
  2160.          If    the value of EXPR does not end in a newline, the
  2161.          current script line number    and input line number (if
  2162.          any) are also printed, and    a newline is supplied.
  2163.          Hint: sometimes appending ", stopped" to your
  2164.          message will cause    it to make better sense    when the
  2165.          string "at    foo line 123" is appended.  Suppose you
  2166.          are running script    "canasta".
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175. Page 33                  Nixdorf TARGON Operating System
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.              Printed August 7, 1992
  2183. PERL(1)
  2184.  
  2185.  
  2186.  
  2187.           die "/etc/games is no    good";
  2188.           die "/etc/games is no    good, stopped";
  2189.  
  2190.          produce, respectively
  2191.  
  2192.           /etc/games is    no good    at canasta line    123.
  2193.           /etc/games is    no good, stopped at canasta line 123.
  2194.  
  2195.          See also exit.
  2196.  
  2197.      do    BLOCK
  2198.          Returns the value of the last command in the
  2199.          sequence of commands indicated by BLOCK.  When
  2200.          modified by a loop    modifier, executes the BLOCK once
  2201.          before testing the    loop condition.     (On other
  2202.          statements    the loop modifiers test    the conditional
  2203.          first.)
  2204.  
  2205.      do    SUBROUTINE (LIST)
  2206.          Executes a    SUBROUTINE declared by a sub declaration,
  2207.          and returns the value of the last expression
  2208.          evaluated in SUBROUTINE.  If there    is no subroutine
  2209.          by    that name, produces a fatal error.  (You may use
  2210.          the "defined" operator to determine if a subroutine
  2211.          exists.)  If you pass arrays as part of LIST you may
  2212.          wish to pass the length of    the array in front of
  2213.          each array.  (See the section on subroutines later
  2214.          on.)  The parentheses are required    to avoid
  2215.          confusion with the    "do EXPR" form.
  2216.  
  2217.          SUBROUTINE    may also be a single scalar variable, in
  2218.          which case    the name of the    subroutine to execute is
  2219.          taken from    the variable.
  2220.  
  2221.          As    an alternate (and preferred) form, you may call    a
  2222.          subroutine    by prefixing the name with an ampersand:
  2223.          &foo(@args).  If you aren't passing any arguments,
  2224.          you don't have to use parentheses.     If you    omit the
  2225.          parentheses, no @_    array is passed    to the
  2226.          subroutine.  The &    form is    also used to specify
  2227.          subroutines to the    defined    and undef operators:
  2228.  
  2229.           if (defined &$var) { &$var($parm); undef &$var; }
  2230.  
  2231.  
  2232.      do    EXPR Uses the value of EXPR as a filename and executes
  2233.          the contents of the file as a perl    script.     Its
  2234.          primary use is to include subroutines from    a perl
  2235.          subroutine    library.
  2236.  
  2237.           do 'stat.pl';
  2238.  
  2239.  
  2240.  
  2241. Page 34                  Nixdorf TARGON Operating System
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.              Printed August 7, 1992
  2249. PERL(1)
  2250.  
  2251.  
  2252.  
  2253.          is    just like
  2254.  
  2255.           eval `cat stat.pl`;
  2256.  
  2257.          except that it's more efficient, more concise, keeps
  2258.          track of the current filename for error messages,
  2259.          and searches all the -I libraries if the file isn't
  2260.          in    the current directory (see also    the @INC array in
  2261.          Predefined    Names).     It's the same,    however, in that
  2262.          it    does reparse the file every time you call it, so
  2263.          if    you are    going to use the file inside a loop you
  2264.          might prefer to use -P and    #include, at the expense
  2265.          of    a little more startup time.  (The main problem
  2266.          with #include is that cpp doesn't grok # comments--a
  2267.          workaround    is to use ";#" for standalone comments.)
  2268.          Note that the following are NOT equivalent:
  2269.  
  2270.           do $foo;  # eval a file
  2271.           do $foo();     # call    a subroutine
  2272.  
  2273.          Note that inclusion of library routines is    better
  2274.          done with the "require" operator.
  2275.  
  2276.      dump LABEL
  2277.          This causes an immediate core dump.  Primarily this
  2278.          is    so that    you can    use the    undump program to turn
  2279.          your core dump into an executable binary after
  2280.          having initialized    all your variables at the
  2281.          beginning of the program.    When the new binary is
  2282.          executed it will begin by executing a "goto LABEL"
  2283.          (with all the restrictions    that goto suffers).
  2284.          Think of it as a goto with    an intervening core dump
  2285.          and reincarnation.     If LABEL is omitted, restarts
  2286.          the program from the top.    WARNING: any files opened
  2287.          at    the time of the    dump will NOT be open any more
  2288.          when the program is reincarnated, with possible
  2289.          resulting confusion on the    part of    perl.  See also
  2290.          -u.
  2291.  
  2292.          Example:
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307. Page 35                  Nixdorf TARGON Operating System
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.              Printed August 7, 1992
  2315. PERL(1)
  2316.  
  2317.  
  2318.  
  2319.           #!/usr/bin/perl
  2320.           require 'getopt.pl';
  2321.           require 'stat.pl';
  2322.           %days    = (
  2323.               'Sun',1,
  2324.               'Mon',2,
  2325.               'Tue',3,
  2326.               'Wed',4,
  2327.               'Thu',5,
  2328.               'Fri',6,
  2329.               'Sat',7);
  2330.  
  2331.           dump QUICKSTART if $ARGV[0] eq '-d';
  2332.  
  2333.          QUICKSTART:
  2334.           do Getopt('f');
  2335.  
  2336.  
  2337.      each(ASSOC_ARRAY)
  2338.  
  2339.      each ASSOC_ARRAY
  2340.          Returns a 2 element array consisting of the key and
  2341.          value for the next    value of an associative    array, so
  2342.          that you can iterate over it.  Entries are    returned
  2343.          in    an apparently random order.  When the array is
  2344.          entirely read, a null array is returned (which when
  2345.          assigned produces a FALSE (0) value).  The    next call
  2346.          to    each() after that will start iterating again.
  2347.          The iterator can be reset only by reading all the
  2348.          elements from the array.  You must    not modify the
  2349.          array while iterating over    it.  There is a    single
  2350.          iterator for each associative array, shared by all
  2351.          each(), keys() and    values() function calls    in the
  2352.          program.  The following prints out    your environment
  2353.          like the printenv program,    only in    a different
  2354.          order:
  2355.  
  2356.           while    (($key,$value) = each %ENV) {
  2357.                print "$key=$value\n";
  2358.           }
  2359.  
  2360.          See also keys() and values().
  2361.  
  2362.      eof(FILEHANDLE)
  2363.  
  2364.      eof()
  2365.  
  2366.      eof     Returns 1 if the next read    on FILEHANDLE will return
  2367.          end of file, or if    FILEHANDLE is not open.
  2368.          FILEHANDLE    may be an expression whose value gives
  2369.          the real filehandle name.    (Note that this    function
  2370.  
  2371.  
  2372.  
  2373. Page 36                  Nixdorf TARGON Operating System
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.              Printed August 7, 1992
  2381. PERL(1)
  2382.  
  2383.  
  2384.  
  2385.          actually reads a character    and then ungetc's it, so
  2386.          it    is not very useful in an interactive context.)
  2387.          An    eof without an argument    returns    the eof    status
  2388.          for the last file read.  Empty parentheses    () may be
  2389.          used to indicate the pseudo file formed of    the files
  2390.          listed on the command line, i.e. eof() is reasonable
  2391.          to    use inside a while (<>)    loop to    detect the end of
  2392.          only the last file.  Use eof(ARGV)    or eof without
  2393.          the parentheses to    test EACH file in a while (<>)
  2394.          loop.  Examples:
  2395.  
  2396.           # insert dashes just before last line    of last    file
  2397.           while    (<>) {
  2398.                if (eof()) {
  2399.                 print "--------------\n";
  2400.                }
  2401.                print;
  2402.           }
  2403.  
  2404.           # reset line numbering on each input file
  2405.           while    (<>) {
  2406.                print "$.\t$_";
  2407.                if (eof)    {     #    Not eof().
  2408.                 close(ARGV);
  2409.                }
  2410.           }
  2411.  
  2412.  
  2413.      eval(EXPR)
  2414.  
  2415.      eval EXPR
  2416.  
  2417.      eval BLOCK
  2418.          EXPR is parsed and    executed as if it were a little
  2419.          perl program.  It is executed in the context of the
  2420.          current perl program, so that any variable    settings,
  2421.          subroutine    or format definitions remain afterwards.
  2422.          The value returned    is the value of    the last
  2423.          expression    evaluated, just    as with    subroutines.  If
  2424.          there is a    syntax error or    runtime    error, or a die
  2425.          statement is executed, an undefined value is
  2426.          returned by eval, and $@ is set to    the error
  2427.          message.  If there    was no error, $@ is guaranteed to
  2428.          be    a null string.    If EXPR    is omitted, evaluates $_.
  2429.          The final semicolon, if any, may be omitted from the
  2430.          expression.
  2431.  
  2432.          Note that,    since eval traps otherwise-fatal errors,
  2433.          it    is useful for determining whether a particular
  2434.          feature (such as dbmopen or symlink) is implemented.
  2435.          It    is also    Perl's exception trapping mechanism,
  2436.  
  2437.  
  2438.  
  2439. Page 37                  Nixdorf TARGON Operating System
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.              Printed August 7, 1992
  2447. PERL(1)
  2448.  
  2449.  
  2450.  
  2451.          where the die operator is used to raise exceptions.
  2452.  
  2453.          If    the code to be executed    doesn't    vary, you may use
  2454.          the eval-BLOCK form to trap run-time errors without
  2455.          incurring the penalty of recompiling each time.  The
  2456.          error, if any, is still returned in $@.  Evaluating
  2457.          a single-quoted string (as    EXPR) has the same
  2458.          effect, except that the eval-EXPR form reports
  2459.          syntax errors at run time via $@, whereas the eval-
  2460.          BLOCK form    reports    syntax errors at compile time.
  2461.          The eval-EXPR form    is optimized to    eval-BLOCK the
  2462.          first time    it succeeds.  (Since the replacement side
  2463.          of    a substitution is considered a single-quoted
  2464.          string when you use the e modifier, the same
  2465.          optimization occurs there.)  Examples:
  2466.  
  2467.           # make divide-by-zero    non-fatal
  2468.           eval { $answer = $a /    $b; }; warn $@ if $@;
  2469.  
  2470.           # optimized to same thing after first    use
  2471.           eval '$answer    = $a / $b'; warn $@ if $@;
  2472.  
  2473.           # a compile-time error
  2474.           eval { $answer = };
  2475.  
  2476.           # a run-time error
  2477.           eval '$answer    =';   #    sets $@
  2478.  
  2479.  
  2480.      exec(LIST)
  2481.  
  2482.      exec LIST
  2483.          If    there is more than one argument    in LIST, or if
  2484.          LIST is an    array with more    than one value,    calls
  2485.          execvp() with the arguments in LIST.  If there is
  2486.          only one scalar argument, the argument is checked
  2487.          for shell metacharacters.    If there are any, the
  2488.          entire argument is    passed to "/bin/sh -c" for
  2489.          parsing.  If there    are none, the argument is split
  2490.          into words    and passed directly to execvp(), which is
  2491.          more efficient.  Note: exec (and system) do not
  2492.          flush your    output buffer, so you may need to set $|
  2493.          to    avoid lost output.  Examples:
  2494.  
  2495.           exec '/bin/echo', 'Your arguments are: ', @ARGV;
  2496.           exec "sort $outfile |    uniq";
  2497.  
  2498.  
  2499.          If    you don't really want to execute the first
  2500.          argument, but want    to lie to the program you are
  2501.          executing about its own name, you can specify the
  2502.  
  2503.  
  2504.  
  2505. Page 38                  Nixdorf TARGON Operating System
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.              Printed August 7, 1992
  2513. PERL(1)
  2514.  
  2515.  
  2516.  
  2517.          program you actually want to run by assigning that
  2518.          to    a variable and putting the name    of the variable
  2519.          in    front of the LIST without a comma.  (This always
  2520.          forces interpretation of the LIST as a multi-valued
  2521.          list, even    if there is only a single scalar in the
  2522.          list.)  Example:
  2523.  
  2524.           $shell = '/bin/csh';
  2525.           exec $shell '-sh';       # pretend it's a login shell
  2526.  
  2527.  
  2528.      exit(EXPR)
  2529.  
  2530.      exit EXPR
  2531.          Evaluates EXPR and    exits immediately with that
  2532.          value.  Example:
  2533.  
  2534.           $ans = <STDIN>;
  2535.           exit 0 if $ans =~ /^[Xx]/;
  2536.  
  2537.          See also die.  If EXPR is omitted,    exits with 0
  2538.          status.
  2539.  
  2540.      exp(EXPR)
  2541.  
  2542.      exp EXPR
  2543.          Returns e to the power of EXPR.  If EXPR is omitted,
  2544.          gives exp($_).
  2545.  
  2546.      fcntl(FILEHANDLE,FUNCTION,SCALAR)
  2547.          Implements    the fcntl(2) function.    You'll probably
  2548.          have to say
  2549.  
  2550.           require "fcntl.ph"; #    probably /usr/local/lib/perl/fcntl.ph
  2551.  
  2552.          first to get the correct function definitions.  If
  2553.          fcntl.ph doesn't exist or doesn't have the    correct
  2554.          definitions you'll    have to    roll your own, based on
  2555.          your C header files such as <sys/fcntl.h>.     (There
  2556.          is    a perl script called h2ph that comes with the
  2557.          perl kit which may    help you in this.)  Argument
  2558.          processing    and value return works just like ioctl
  2559.          below.  Note that fcntl will produce a fatal error
  2560.          if    used on    a machine that doesn't implement
  2561.          fcntl(2).
  2562.  
  2563.      fileno(FILEHANDLE)
  2564.  
  2565.      fileno FILEHANDLE
  2566.          Returns the file descriptor for a filehandle.
  2567.          Useful for    constructing bitmaps for select().  If
  2568.  
  2569.  
  2570.  
  2571. Page 39                  Nixdorf TARGON Operating System
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.              Printed August 7, 1992
  2579. PERL(1)
  2580.  
  2581.  
  2582.  
  2583.          FILEHANDLE    is an expression, the value is taken as
  2584.          the name of the filehandle.
  2585.  
  2586.      flock(FILEHANDLE,OPERATION)
  2587.          Calls flock(2) on FILEHANDLE.  See    manual page for
  2588.          flock(2) for definition of    OPERATION.  Returns true
  2589.          for success, false    on failure.  Will produce a fatal
  2590.          error if used on a    machine    that doesn't implement
  2591.          flock(2).    Here's a mailbox appender for BSD
  2592.          systems.
  2593.  
  2594.           $LOCK_SH = 1;
  2595.           $LOCK_EX = 2;
  2596.           $LOCK_NB = 4;
  2597.           $LOCK_UN = 8;
  2598.  
  2599.           sub lock {
  2600.               flock(MBOX,$LOCK_EX);
  2601.               #    and, in    case someone appended
  2602.               #    while we were waiting...
  2603.               seek(MBOX, 0, 2);
  2604.           }
  2605.  
  2606.           sub unlock {
  2607.               flock(MBOX,$LOCK_UN);
  2608.           }
  2609.  
  2610.           open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
  2611.                || die "Can't open mailbox: $!";
  2612.  
  2613.           do lock();
  2614.           print    MBOX $msg,"\n\n";
  2615.           do unlock();
  2616.  
  2617.  
  2618.      fork    Does a fork() call.  Returns the child pid    to the
  2619.          parent process and    0 to the child process.     Note:
  2620.          unflushed buffers remain unflushed    in both
  2621.          processes,    which means you    may need to set    $| to
  2622.          avoid duplicate output.
  2623.  
  2624.      getc(FILEHANDLE)
  2625.  
  2626.      getc FILEHANDLE
  2627.  
  2628.      getc    Returns the next character    from the input file
  2629.          attached to FILEHANDLE, or    a null string at EOF.  If
  2630.          FILEHANDLE    is omitted, reads from STDIN.
  2631.  
  2632.      getlogin
  2633.          Returns the current login from /etc/utmp, if any.
  2634.  
  2635.  
  2636.  
  2637. Page 40                  Nixdorf TARGON Operating System
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.              Printed August 7, 1992
  2645. PERL(1)
  2646.  
  2647.  
  2648.  
  2649.          If    null, use getpwuid.
  2650.  
  2651.           $login = getlogin || (getpwuid($<))[0] ||
  2652.          "Somebody";
  2653.  
  2654.  
  2655.      getpeername(SOCKET)
  2656.          Returns the packed    sockaddr address of other end of
  2657.          the SOCKET    connection.
  2658.  
  2659.           # An internet    sockaddr
  2660.           $sockaddr = 'S n a4 x8';
  2661.           $hersockaddr = getpeername(S);
  2662.           ($family, $port, $heraddr) =
  2663.                 unpack($sockaddr,$hersockaddr);
  2664.  
  2665.  
  2666.      getpgrp(PID)
  2667.  
  2668.      getpgrp PID
  2669.          Returns the current process group for the specified
  2670.          PID, 0 for    the current process.  Will produce a
  2671.          fatal error if used on a machine that doesn't
  2672.          implement getpgrp(2).  If EXPR is omitted,    returns
  2673.          process group of current process.
  2674.  
  2675.      getppid Returns the process id of the parent process.
  2676.  
  2677.      getpriority(WHICH,WHO)
  2678.          Returns the current priority for a    process, a
  2679.          process group, or a user.    (See getpriority(2).)
  2680.          Will produce a fatal error    if used    on a machine that
  2681.          doesn't implement getpriority(2).
  2682.  
  2683.      getpwnam(NAME)
  2684.  
  2685.      getgrnam(NAME)
  2686.  
  2687.      gethostbyname(NAME)
  2688.  
  2689.      getnetbyname(NAME)
  2690.  
  2691.      getprotobyname(NAME)
  2692.  
  2693.      getpwuid(UID)
  2694.  
  2695.      getgrgid(GID)
  2696.  
  2697.      getservbyname(NAME,PROTO)
  2698.  
  2699.  
  2700.  
  2701.  
  2702.  
  2703. Page 41                  Nixdorf TARGON Operating System
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.              Printed August 7, 1992
  2711. PERL(1)
  2712.  
  2713.  
  2714.  
  2715.      gethostbyaddr(ADDR,ADDRTYPE)
  2716.  
  2717.      getnetbyaddr(ADDR,ADDRTYPE)
  2718.  
  2719.      getprotobynumber(NUMBER)
  2720.  
  2721.      getservbyport(PORT,PROTO)
  2722.  
  2723.      getpwent
  2724.  
  2725.      getgrent
  2726.  
  2727.      gethostent
  2728.  
  2729.      getnetent
  2730.  
  2731.      getprotoent
  2732.  
  2733.      getservent
  2734.  
  2735.      setpwent
  2736.  
  2737.      setgrent
  2738.  
  2739.      sethostent(STAYOPEN)
  2740.  
  2741.      setnetent(STAYOPEN)
  2742.  
  2743.      setprotoent(STAYOPEN)
  2744.  
  2745.      setservent(STAYOPEN)
  2746.  
  2747.      endpwent
  2748.  
  2749.      endgrent
  2750.  
  2751.      endhostent
  2752.  
  2753.      endnetent
  2754.  
  2755.      endprotoent
  2756.  
  2757.      endservent
  2758.          These routines perform the    same functions as their
  2759.          counterparts in the system    library.  Within an array
  2760.          context, the return values    from the various get
  2761.          routines are as follows:
  2762.  
  2763.           ($name,$passwd,$uid,$gid,
  2764.              $quota,$comment,$gcos,$dir,$shell)    = getpw...
  2765.           ($name,$passwd,$gid,$members)    = getgr...
  2766.  
  2767.  
  2768.  
  2769. Page 42                  Nixdorf TARGON Operating System
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.              Printed August 7, 1992
  2777. PERL(1)
  2778.  
  2779.  
  2780.  
  2781.           ($name,$aliases,$addrtype,$length,@addrs) = gethost...
  2782.           ($name,$aliases,$addrtype,$net) = getnet...
  2783.           ($name,$aliases,$proto) = getproto...
  2784.           ($name,$aliases,$port,$proto)    = getserv...
  2785.  
  2786.          (If the entry doesn't exist you get a null    list.)
  2787.  
  2788.          Within a scalar context, you get the name,    unless
  2789.          the function was a    lookup by name,    in which case you
  2790.          get the other thing, whatever it is.  (If the entry
  2791.          doesn't exist you get the undefined value.)  For
  2792.          example:
  2793.  
  2794.           $uid = getpwnam
  2795.           $name    = getpwuid
  2796.           $name    = getpwent
  2797.           $gid = getgrnam
  2798.           $name    = getgrgid
  2799.           $name    = getgrent
  2800.           etc.
  2801.  
  2802.          The $members value    returned by getgr... is    a space
  2803.          separated list of the login names of the members of
  2804.          the group.
  2805.  
  2806.          For the gethost...    functions, if the h_errno
  2807.          variable is supported in C, it will be returned to
  2808.          you via $?    if the function    call fails.  The @addrs
  2809.          value returned by a successful call is a list of the
  2810.          raw addresses returned by the corresponding system
  2811.          library call.  In the Internet domain, each address
  2812.          is    four bytes long    and you    can unpack it by saying
  2813.          something like:
  2814.  
  2815.           ($a,$b,$c,$d)    = unpack('C4',$addr[0]);
  2816.  
  2817.  
  2818.      getsockname(SOCKET)
  2819.          Returns the packed    sockaddr address of this end of
  2820.          the SOCKET    connection.
  2821.  
  2822.           # An internet    sockaddr
  2823.           $sockaddr = 'S n a4 x8';
  2824.           $mysockaddr =    getsockname(S);
  2825.           ($family, $port, $myaddr) =
  2826.                 unpack($sockaddr,$mysockaddr);
  2827.  
  2828.  
  2829.      getsockopt(SOCKET,LEVEL,OPTNAME)
  2830.          Returns the socket    option requested, or undefined if
  2831.          there is an error.
  2832.  
  2833.  
  2834.  
  2835. Page 43                  Nixdorf TARGON Operating System
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.              Printed August 7, 1992
  2843. PERL(1)
  2844.  
  2845.  
  2846.  
  2847.      gmtime(EXPR)
  2848.  
  2849.      gmtime EXPR
  2850.          Converts a    time as    returned by the    time function to
  2851.          a 9-element array with the    time analyzed for the
  2852.          Greenwich timezone.  Typically used as follows:
  2853.  
  2854.          ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
  2855.                        gmtime(time);
  2856.  
  2857.          All array elements    are numeric, and come straight
  2858.          out of a struct tm.  In particular    this means that
  2859.          $mon has the range    0..11 and $wday    has the    range
  2860.          0..6.  If EXPR is omitted,    does gmtime(time).
  2861.  
  2862.      goto LABEL
  2863.          Finds the statement labeled with LABEL and    resumes
  2864.          execution there.  Currently you may only go to
  2865.          statements    in the main body of the    program    that are
  2866.          not nested    inside a do {} construct.  This    statement
  2867.          is    not implemented    very efficiently, and is here
  2868.          only to make the sed-to-perl translator easier.  I
  2869.          may change    its semantics at any time, consistent
  2870.          with support for translated sed scripts.  Use it at
  2871.          your own risk.  Better yet, don't use it at all.
  2872.  
  2873.      grep(EXPR,LIST)
  2874.          Evaluates EXPR for    each element of    LIST (locally
  2875.          setting $_    to each    element) and returns the array
  2876.          value consisting of those elements    for which the
  2877.          expression    evaluated to true.  In a scalar    context,
  2878.          returns the number    of times the expression    was true.
  2879.  
  2880.           @foo = grep(!/^#/, @bar);    # weed out comments
  2881.  
  2882.          Note that,    since $_ is a reference    into the array
  2883.          value, it can be used to modify the elements of the
  2884.          array.  While this    is useful and supported, it can
  2885.          cause bizarre results if the LIST is not a    named
  2886.          array.
  2887.  
  2888.      hex(EXPR)
  2889.  
  2890.      hex EXPR
  2891.          Returns the decimal value of EXPR interpreted as an
  2892.          hex string.  (To interpret    strings    that might start
  2893.          with 0 or 0x see oct().)  If EXPR is omitted, uses
  2894.          $_.
  2895.  
  2896.  
  2897.  
  2898.  
  2899.  
  2900.  
  2901. Page 44                  Nixdorf TARGON Operating System
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908.              Printed August 7, 1992
  2909. PERL(1)
  2910.  
  2911.  
  2912.  
  2913.      index(STR,SUBSTR,POSITION)
  2914.  
  2915.      index(STR,SUBSTR)
  2916.          Returns the position of the first occurrence of
  2917.          SUBSTR in STR at or after POSITION.  If POSITION is
  2918.          omitted, starts searching from the    beginning of the
  2919.          string.  The return value is based    at 0, or whatever
  2920.          you've set    the $[ variable    to.  If    the substring is
  2921.          not found,    returns    one less than the base,
  2922.          ordinarily    -1.
  2923.  
  2924.      int(EXPR)
  2925.  
  2926.      int EXPR
  2927.          Returns the integer portion of EXPR.  If EXPR is
  2928.          omitted, uses $_.
  2929.  
  2930.      ioctl(FILEHANDLE,FUNCTION,SCALAR)
  2931.          Implements    the ioctl(2) function.    You'll probably
  2932.          have to say
  2933.  
  2934.           require "ioctl.ph"; #    probably /usr/local/lib/perl/ioctl.ph
  2935.  
  2936.          first to get the correct function definitions.  If
  2937.          ioctl.ph doesn't exist or doesn't have the    correct
  2938.          definitions you'll    have to    roll your own, based on
  2939.          your C header files such as <sys/ioctl.h>.     (There
  2940.          is    a perl script called h2ph that comes with the
  2941.          perl kit which may    help you in this.)  SCALAR will
  2942.          be    read and/or written depending on the FUNCTION--a
  2943.          pointer to    the string value of SCALAR will    be passed
  2944.          as    the third argument of the actual ioctl call.  (If
  2945.          SCALAR has    no string value    but does have a    numeric
  2946.          value, that value will be passed rather than a
  2947.          pointer to    the string value.  To guarantee    this to
  2948.          be    true, add a 0 to the scalar before using it.)
  2949.          The pack()    and unpack() functions are useful for
  2950.          manipulating the values of    structures used    by
  2951.          ioctl().  The following example sets the erase
  2952.          character to DEL.
  2953.  
  2954.           require 'ioctl.ph';
  2955.           $sgttyb_t = "ccccs";        # 4 chars and a    short
  2956.           if (ioctl(STDIN,$TIOCGETP,$sgttyb)) {
  2957.                @ary = unpack($sgttyb_t,$sgttyb);
  2958.                $ary[2] = 127;
  2959.                $sgttyb = pack($sgttyb_t,@ary);
  2960.                ioctl(STDIN,$TIOCSETP,$sgttyb)
  2961.                 || die "Can't ioctl: $!";
  2962.           }
  2963.  
  2964.  
  2965.  
  2966.  
  2967. Page 45                  Nixdorf TARGON Operating System
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974.              Printed August 7, 1992
  2975. PERL(1)
  2976.  
  2977.  
  2978.  
  2979.          The return    value of ioctl (and fcntl) is as follows:
  2980.  
  2981.           if OS    returns:       perl    returns:
  2982.             -1                 undefined value
  2983.             0                 string "0 but true"
  2984.             anything else         that number
  2985.  
  2986.          Thus perl returns true on success and false on
  2987.          failure, yet you can still    easily determine the
  2988.          actual value returned by the operating system:
  2989.  
  2990.           ($retval = ioctl(...)) || ($retval = -1);
  2991.           printf "System returned %d\n", $retval;
  2992.  
  2993.      join(EXPR,LIST)
  2994.  
  2995.      join(EXPR,ARRAY)
  2996.          Joins the separate    strings    of LIST    or ARRAY into a
  2997.          single string with    fields separated by the    value of
  2998.          EXPR, and returns the string.  Example:
  2999.  
  3000.          $_    = join(':',
  3001.                $login,$passwd,$uid,$gid,$gcos,$home,$shell);
  3002.  
  3003.          See split.
  3004.  
  3005.      keys(ASSOC_ARRAY)
  3006.  
  3007.      keys ASSOC_ARRAY
  3008.          Returns a normal array consisting of all the keys of
  3009.          the named associative array.  The keys are    returned
  3010.          in    an apparently random order, but    it is the same
  3011.          order as either the values() or each() function
  3012.          produces (given that the associative array    has not
  3013.          been modified).  Here is yet another way to print
  3014.          your environment:
  3015.  
  3016.           @keys    = keys %ENV;
  3017.           @values = values %ENV;
  3018.           while    ($#keys    >= 0) {
  3019.                print pop(@keys), '=', pop(@values), "\n";
  3020.           }
  3021.  
  3022.          or    how about sorted by key:
  3023.  
  3024.           foreach $key (sort(keys %ENV)) {
  3025.                print $key, '=',    $ENV{$key}, "\n";
  3026.           }
  3027.  
  3028.  
  3029.  
  3030.  
  3031.  
  3032.  
  3033. Page 46                  Nixdorf TARGON Operating System
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.              Printed August 7, 1992
  3041. PERL(1)
  3042.  
  3043.  
  3044.  
  3045.      kill(LIST)
  3046.  
  3047.      kill LIST
  3048.          Sends a signal to a list of processes.  The first
  3049.          element of    the list must be the signal to send.
  3050.          Returns the number    of processes successfully
  3051.          signaled.
  3052.  
  3053.           $cnt = kill 1, $child1, $child2;
  3054.           kill 9, @goners;
  3055.  
  3056.          If    the signal is negative,    kills process groups
  3057.          instead of    processes.  (On    System V, a negative
  3058.          process number will also kill process groups, but
  3059.          that's not    portable.)  You    may use    a signal name in
  3060.          quotes.
  3061.  
  3062.      last LABEL
  3063.  
  3064.      last    The last command is like the break    statement in C
  3065.          (as used in loops); it immediately    exits the loop in
  3066.          question.    If the LABEL is    omitted, the command
  3067.          refers to the innermost enclosing loop.  The
  3068.          continue block, if    any, is    not executed:
  3069.  
  3070.           line:    while (<STDIN>)    {
  3071.                last line if /^$/;  # exit when done with header
  3072.                ...
  3073.           }
  3074.  
  3075.  
  3076.      length(EXPR)
  3077.  
  3078.      length EXPR
  3079.          Returns the length    in characters of the value of
  3080.          EXPR.  If EXPR is omitted,    returns    length of $_.
  3081.  
  3082.      link(OLDFILE,NEWFILE)
  3083.          Creates a new filename linked to the old filename.
  3084.          Returns 1 for success, 0 otherwise.
  3085.  
  3086.      listen(SOCKET,QUEUESIZE)
  3087.          Does the same thing that the listen system    call
  3088.          does.  Returns true if it succeeded, false
  3089.          otherwise.     See example in    section    on Interprocess
  3090.          Communication.
  3091.  
  3092.      local(LIST)
  3093.          Declares the listed variables to be local to the
  3094.          enclosing block, subroutine, eval or "do".     All the
  3095.          listed elements must be legal lvalues.  This
  3096.  
  3097.  
  3098.  
  3099. Page 47                  Nixdorf TARGON Operating System
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106.              Printed August 7, 1992
  3107. PERL(1)
  3108.  
  3109.  
  3110.  
  3111.          operator works by saving the current values of those
  3112.          variables in LIST on a hidden stack and restoring
  3113.          them upon exiting the block, subroutine or    eval.
  3114.          This means    that called subroutines    can also
  3115.          reference the local variable, but not the global
  3116.          one.  The LIST may    be assigned to if desired, which
  3117.          allows you    to initialize your local variables.  (If
  3118.          no    initializer is given for a particular variable,
  3119.          it    is created with    an undefined value.)  Commonly
  3120.          this is used to name the parameters to a subroutine.
  3121.          Examples:
  3122.  
  3123.           sub RANGEVAL {
  3124.                local($min, $max, $thunk) = @_;
  3125.                local($result) =    '';
  3126.                local($i);
  3127.  
  3128.                # Presumably $thunk makes reference to $i
  3129.  
  3130.                for ($i = $min; $i < $max; $i++)    {
  3131.                 $result .= eval $thunk;
  3132.                }
  3133.  
  3134.                $result;
  3135.           }
  3136.  
  3137.           if ($sw eq '-v') {
  3138.               #    init local array with global array
  3139.               local(@ARGV) = @ARGV;
  3140.               unshift(@ARGV,'echo');
  3141.               system @ARGV;
  3142.           }
  3143.           # @ARGV restored
  3144.  
  3145.           # temporarily    add to digits associative array
  3146.           if ($base12) {
  3147.                # (NOTE:    not claiming this is efficient!)
  3148.                local(%digits) =    (%digits,'t',10,'e',11);
  3149.                do parse_num();
  3150.           }
  3151.  
  3152.          Note that local() is a run-time command, and so gets
  3153.          executed every time through a loop, using up more
  3154.          stack storage each    time until it's    all released at
  3155.          once when the loop    is exited.
  3156.  
  3157.      localtime(EXPR)
  3158.  
  3159.      localtime EXPR
  3160.          Converts a    time as    returned by the    time function to
  3161.          a 9-element array with the    time analyzed for the
  3162.  
  3163.  
  3164.  
  3165. Page 48                  Nixdorf TARGON Operating System
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172.              Printed August 7, 1992
  3173. PERL(1)
  3174.  
  3175.  
  3176.  
  3177.          local timezone.  Typically    used as    follows:
  3178.  
  3179.          ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
  3180.                        localtime(time);
  3181.  
  3182.          All array elements    are numeric, and come straight
  3183.          out of a struct tm.  In particular    this means that
  3184.          $mon has the range    0..11 and $wday    has the    range
  3185.          0..6.  If EXPR is omitted,    does localtime(time).
  3186.  
  3187.      log(EXPR)
  3188.  
  3189.      log EXPR
  3190.          Returns logarithm (base e)    of EXPR.  If EXPR is
  3191.          omitted, returns log of $_.
  3192.  
  3193.      lstat(FILEHANDLE)
  3194.  
  3195.      lstat FILEHANDLE
  3196.  
  3197.      lstat(EXPR)
  3198.  
  3199.      lstat SCALARVARIABLE
  3200.          Does the same thing as the    stat() function, but
  3201.          stats a symbolic link instead of the file the
  3202.          symbolic link points to.  If symbolic links are
  3203.          unimplemented on your system, a normal stat is done.
  3204.  
  3205.      m/PATTERN/gio
  3206.  
  3207.      /PATTERN/gio
  3208.          Searches a    string for a pattern match, and    returns
  3209.          true (1) or false ('').  If no string is specified
  3210.          via the =~    or !~ operator,    the $_ string is
  3211.          searched.    (The string specified with =~ need not be
  3212.          an    lvalue--it may be the result of    an expression
  3213.          evaluation, but remember the =~ binds rather
  3214.          tightly.)    See also the section on    regular
  3215.          expressions.
  3216.  
  3217.          If    / is the delimiter then    the initial 'm'    is
  3218.          optional.    With the 'm' you can use any pair of
  3219.          non-alphanumeric characters as delimiters.     This is
  3220.          particularly useful for matching Unix path    names
  3221.          that contain '/'.    If the final delimiter is
  3222.          followed by the optional letter 'i', the matching is
  3223.          done in a case-insensitive    manner.     PATTERN may
  3224.          contain references    to scalar variables, which will
  3225.          be    interpolated (and the pattern recompiled) every
  3226.          time the pattern search is    evaluated.  (Note that $)
  3227.          and $| may    not be interpolated because they look
  3228.  
  3229.  
  3230.  
  3231. Page 49                  Nixdorf TARGON Operating System
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.              Printed August 7, 1992
  3239. PERL(1)
  3240.  
  3241.  
  3242.  
  3243.          like end-of-string    tests.)     If you    want such a
  3244.          pattern to    be compiled only once, add an "o" after
  3245.          the trailing delimiter.  This avoids expensive run-
  3246.          time recompilations, and is useful    when the value
  3247.          you are interpolating won't change    over the life of
  3248.          the script.  If the PATTERN evaluates to a    null
  3249.          string, the most recent successful    regular
  3250.          expression    is used    instead.
  3251.  
  3252.          If    used in    a context that requires    an array value,    a
  3253.          pattern match returns an array consisting of the
  3254.          subexpressions matched by the parentheses in the
  3255.          pattern, i.e. ($1,    $2, $3...).  It    does NOT actually
  3256.          set $1, $2, etc. in this case, nor    does it    set $+,
  3257.          $`, $& or $'.  If the match fails,    a null array is
  3258.          returned.    If the match succeeds, but there were no
  3259.          parentheses, an array value of (1)    is returned.
  3260.  
  3261.          Examples:
  3262.  
  3263.          open(tty, '/dev/tty');
  3264.          <tty> =~ /^y/i    && do foo();    # do foo if desired
  3265.  
  3266.          if (/Version: *([0-9.]*)/) { $version = $1; }
  3267.  
  3268.          next if m#^/usr/spool/uucp#;
  3269.  
  3270.          # poor    man's grep
  3271.          $arg =    shift;
  3272.          while (<>) {
  3273.               print if /$arg/o;       # compile only once
  3274.          }
  3275.  
  3276.          if (($F1, $F2,    $Etc) =    ($foo =~ /^(\S+)\s+(\S+)\s*(.*)/))
  3277.  
  3278.          This last example splits $foo into    the first two
  3279.          words and the remainder of    the line, and assigns
  3280.          those three fields    to $F1,    $F2 and    $Etc.  The
  3281.          conditional is true if any    variables were assigned,
  3282.          i.e. if the pattern matched.
  3283.  
  3284.          The "g" modifier specifies    global pattern
  3285.          matching--that is,    matching as many times as
  3286.          possible within the string.  How it behaves depends
  3287.          on    the context.  In an array context, it returns a
  3288.          list of all the substrings    matched    by all the
  3289.          parentheses in the    regular    expression.  If    there are
  3290.          no    parentheses, it    returns    a list of all the matched
  3291.          strings, as if there were parentheses around the
  3292.          whole pattern.  In    a scalar context, it iterates
  3293.          through the string, returning TRUE    each time it
  3294.  
  3295.  
  3296.  
  3297. Page 50                  Nixdorf TARGON Operating System
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304.              Printed August 7, 1992
  3305. PERL(1)
  3306.  
  3307.  
  3308.  
  3309.          matches, and FALSE    when it    eventually runs    out of
  3310.          matches.  (In other words,    it remembers where it
  3311.          left off last time    and restarts the search    at that
  3312.          point.)  It presumes that you have    not modified the
  3313.          string since the last match.  Modifying the string
  3314.          between matches may result    in undefined behavior.
  3315.          (You can actually get away    with in-place
  3316.          modifications via substr()    that do    not change the
  3317.          length of the entire string.  In general, however,
  3318.          you should    be using s///g for such    modifications.)
  3319.          Examples:
  3320.  
  3321.           # array context
  3322.           ($one,$five,$fifteen)    = (`uptime` =~ /(\d+\.\d+)/g);
  3323.  
  3324.           # scalar context
  3325.           $/ = ""; $* =    1;
  3326.           while    ($paragraph = <>) {
  3327.               while ($paragraph    =~ /[a-z]['")]*[.!?]+['")]*\s/g) {
  3328.                $sentences++;
  3329.               }
  3330.           }
  3331.           print    "$sentences\n";
  3332.  
  3333.  
  3334.      mkdir(FILENAME,MODE)
  3335.          Creates the directory specified by    FILENAME, with
  3336.          permissions specified by MODE (as modified    by
  3337.          umask).  If it succeeds it    returns    1, otherwise it
  3338.          returns 0 and sets    $! (errno).
  3339.  
  3340.      msgctl(ID,CMD,ARG)
  3341.          Calls the System V    IPC function msgctl.  If CMD is
  3342.          &IPC_STAT,    then ARG must be a variable which will
  3343.          hold the returned msqid_ds    structure.  Returns like
  3344.          ioctl: the    undefined value    for error, "0 but true"
  3345.          for zero, or the actual return value otherwise.
  3346.  
  3347.      msgget(KEY,FLAGS)
  3348.          Calls the System V    IPC function msgget.  Returns the
  3349.          message queue id, or the undefined    value if there is
  3350.          an    error.
  3351.  
  3352.      msgsnd(ID,MSG,FLAGS)
  3353.          Calls the System V    IPC function msgsnd to send the
  3354.          message MSG to the    message    queue ID.  MSG must begin
  3355.          with the long integer message type, which may be
  3356.          created with pack("L", $type).  Returns true if
  3357.          successful, or false if there is an error.
  3358.  
  3359.  
  3360.  
  3361.  
  3362.  
  3363. Page 51                  Nixdorf TARGON Operating System
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370.              Printed August 7, 1992
  3371. PERL(1)
  3372.  
  3373.  
  3374.  
  3375.      msgrcv(ID,VAR,SIZE,TYPE,FLAGS)
  3376.          Calls the System V    IPC function msgrcv to receive a
  3377.          message from message queue    ID into    variable VAR with
  3378.          a maximum message size of SIZE.  Note that    if a
  3379.          message is    received, the message type will    be the
  3380.          first thing in VAR, and the maximum length    of VAR is
  3381.          SIZE plus the size    of the message type.  Returns
  3382.          true if successful, or false if there is an error.
  3383.  
  3384.      next LABEL
  3385.  
  3386.      next    The next command is like the continue statement in
  3387.          C;    it starts the next iteration of    the loop:
  3388.  
  3389.           line:    while (<STDIN>)    {
  3390.                next line if /^#/;  # discard comments
  3391.                ...
  3392.           }
  3393.  
  3394.          Note that if there    were a continue    block on the
  3395.          above, it would get executed even on discarded
  3396.          lines.  If    the LABEL is omitted, the command refers
  3397.          to    the innermost enclosing    loop.
  3398.  
  3399.      oct(EXPR)
  3400.  
  3401.      oct EXPR
  3402.          Returns the decimal value of EXPR interpreted as an
  3403.          octal string.  (If    EXPR happens to    start off with
  3404.          0x, interprets it as a hex    string instead.)  The
  3405.          following will handle decimal, octal and hex in the
  3406.          standard notation:
  3407.  
  3408.           $val = oct($val) if $val =~ /^0/;
  3409.  
  3410.          If    EXPR is    omitted, uses $_.
  3411.  
  3412.      open(FILEHANDLE,EXPR)
  3413.  
  3414.      open(FILEHANDLE)
  3415.  
  3416.      open FILEHANDLE
  3417.          Opens the file whose filename is given by EXPR, and
  3418.          associates    it with    FILEHANDLE.  If    FILEHANDLE is an
  3419.          expression, its value is used as the name of the
  3420.          real filehandle wanted.  If EXPR is omitted, the
  3421.          scalar variable of    the same name as the FILEHANDLE
  3422.          contains the filename.  If    the filename begins with
  3423.          "<" or nothing, the file is opened    for input.  If
  3424.          the filename begins with ">", the file is opened for
  3425.          output.  If the filename begins with ">>",    the file
  3426.  
  3427.  
  3428.  
  3429. Page 52                  Nixdorf TARGON Operating System
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436.              Printed August 7, 1992
  3437. PERL(1)
  3438.  
  3439.  
  3440.  
  3441.          is    opened for appending.  (You can    put a '+' in
  3442.          front of the '>' or '<' to    indicate that you want
  3443.          both read and write access    to the file.)  If the
  3444.          filename begins with "|", the filename is
  3445.          interpreted as a command to which output is to be
  3446.          piped, and    if the filename    ends with a "|", the
  3447.          filename is interpreted as    command    which pipes input
  3448.          to    us.  (You may not have a command that pipes both
  3449.          in    and out.)  Opening '-' opens STDIN and opening
  3450.          '>-' opens    STDOUT.     Open returns non-zero upon
  3451.          success, the undefined value otherwise.  If the open
  3452.          involved a    pipe, the return value happens to be the
  3453.          pid of the    subprocess.  Examples:
  3454.  
  3455.           $article = 100;
  3456.           open article || die "Can't find article $article: $!\n";
  3457.           while    (<article>) {...
  3458.  
  3459.           open(LOG, '>>/usr/spool/news/twitlog');
  3460.                       #    (log is    reserved)
  3461.  
  3462.           open(article,    "caesar    <$article |");
  3463.                       #    decrypt    article
  3464.  
  3465.           open(extract,    "|sort >/tmp/Tmp$$");
  3466.                       #    $$ is our process#
  3467.  
  3468.           # process argument list of files along with any includes
  3469.  
  3470.           foreach $file    (@ARGV)    {
  3471.                do process($file, 'fh00');    # no pun intended
  3472.           }
  3473.  
  3474.           sub process {
  3475.                local($filename,    $input)    = @_;
  3476.                $input++;      #    this is    a string increment
  3477.                unless (open($input, $filename))    {
  3478.                 print STDERR "Can't    open $filename:    $!\n";
  3479.                 return;
  3480.                }
  3481.                while (<$input>)    {    # note use of indirection
  3482.                 if (/^#include "(.*)"/) {
  3483.                  do process($1,    $input);
  3484.                  next;
  3485.                 }
  3486.                 ...          #    whatever
  3487.                }
  3488.           }
  3489.  
  3490.          You may also, in the Bourne shell tradition, specify
  3491.          an    EXPR beginning with ">&", in which case    the rest
  3492.  
  3493.  
  3494.  
  3495. Page 53                  Nixdorf TARGON Operating System
  3496.  
  3497.  
  3498.  
  3499.  
  3500.  
  3501.  
  3502.              Printed August 7, 1992
  3503. PERL(1)
  3504.  
  3505.  
  3506.  
  3507.          of    the string is interpreted as the name of a
  3508.          filehandle    (or file descriptor, if    numeric) which is
  3509.          to    be duped and opened.  You may use & after >, >>,
  3510.          <,    +>, +>>    and +<.     The mode you specify should
  3511.          match the mode of the original filehandle.     Here is
  3512.          a script that saves, redirects, and restores STDOUT
  3513.          and STDERR:
  3514.  
  3515.           #!/usr/bin/perl
  3516.           open(SAVEOUT,    ">&STDOUT");
  3517.           open(SAVEERR,    ">&STDERR");
  3518.  
  3519.           open(STDOUT, ">foo.out") || die "Can't redirect stdout";
  3520.           open(STDERR, ">&STDOUT") || die "Can't dup stdout";
  3521.  
  3522.           select(STDERR); $| = 1;    # make unbuffered
  3523.           select(STDOUT); $| = 1;    # make unbuffered
  3524.  
  3525.           print    STDOUT "stdout 1\n";    # this works for
  3526.           print    STDERR "stderr 1\n";    # subprocesses too
  3527.  
  3528.           close(STDOUT);
  3529.           close(STDERR);
  3530.  
  3531.           open(STDOUT, ">&SAVEOUT");
  3532.           open(STDERR, ">&SAVEERR");
  3533.  
  3534.           print    STDOUT "stdout 2\n";
  3535.           print    STDERR "stderr 2\n";
  3536.  
  3537.          If    you open a pipe    on the command "-", i.e. either
  3538.          "|-" or "-|", then    there is an implicit fork done,
  3539.          and the return value of open is the pid of    the child
  3540.          within the    parent process,    and 0 within the child
  3541.          process.  (Use defined($pid) to determine if the
  3542.          open was successful.)  The    filehandle behaves
  3543.          normally for the parent, but i/o to that filehandle
  3544.          is    piped from/to the STDOUT/STDIN of the child
  3545.          process.  In the child process the    filehandle isn't
  3546.          opened--i/o happens from/to the new STDOUT    or STDIN.
  3547.          Typically this is used like the normal piped open
  3548.          when you want to exercise more control over just how
  3549.          the pipe command gets executed, such as when you are
  3550.          running setuid, and don't want to have to scan shell
  3551.          commands for metacharacters.  The following pairs
  3552.          are more or less equivalent:
  3553.  
  3554.  
  3555.  
  3556.  
  3557.  
  3558.  
  3559.  
  3560.  
  3561. Page 54                  Nixdorf TARGON Operating System
  3562.  
  3563.  
  3564.  
  3565.  
  3566.  
  3567.  
  3568.              Printed August 7, 1992
  3569. PERL(1)
  3570.  
  3571.  
  3572.  
  3573.           open(FOO, "|tr '[a-z]' '[A-Z]'");
  3574.           open(FOO, "|-") || exec 'tr',    '[a-z]', '[A-Z]';
  3575.  
  3576.           open(FOO, "cat -n '$file'|");
  3577.           open(FOO, "-|") || exec 'cat', '-n', $file;
  3578.  
  3579.          Explicitly    closing    any piped filehandle causes the
  3580.          parent process to wait for    the child to finish, and
  3581.          returns the status    value in $?.  Note: on any
  3582.          operation which may do a fork, unflushed buffers
  3583.          remain unflushed in both processes, which means you
  3584.          may need to set $|    to avoid duplicate output.
  3585.  
  3586.          The filename that is passed to open will have
  3587.          leading and trailing whitespace deleted.  In order
  3588.          to    open a file with arbitrary weird characters in
  3589.          it, it's necessary    to protect any leading and
  3590.          trailing whitespace thusly:
  3591.  
  3592.              $file =~ s#^(\s)#./$1#;
  3593.              open(FOO, "< $file\0");
  3594.  
  3595.  
  3596.      opendir(DIRHANDLE,EXPR)
  3597.          Opens a directory named EXPR for processing by
  3598.          readdir(),    telldir(), seekdir(), rewinddir() and
  3599.          closedir().  Returns true if successful.  DIRHANDLEs
  3600.          have their    own namespace separate from FILEHANDLEs.
  3601.  
  3602.      ord(EXPR)
  3603.  
  3604.      ord EXPR
  3605.          Returns the numeric ascii value of    the first
  3606.          character of EXPR.     If EXPR is omitted, uses $_.
  3607.  
  3608.      pack(TEMPLATE,LIST)
  3609.          Takes an array or list of values and packs    it into    a
  3610.          binary structure, returning the string containing
  3611.          the structure.  The TEMPLATE is a sequence    of
  3612.          characters    that give the order and    type of    values,
  3613.          as    follows:
  3614.  
  3615.           A    An ascii    string,    will be    space padded.
  3616.           a    An ascii    string,    will be    null padded.
  3617.           c    A signed    char value.
  3618.           C    An unsigned char    value.
  3619.           s    A signed    short value.
  3620.           S    An unsigned short value.
  3621.           i    A signed    integer    value.
  3622.           I    An unsigned integer value.
  3623.           l    A signed    long value.
  3624.  
  3625.  
  3626.  
  3627. Page 55                  Nixdorf TARGON Operating System
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.              Printed August 7, 1992
  3635. PERL(1)
  3636.  
  3637.  
  3638.  
  3639.           L    An unsigned long    value.
  3640.           n    A short in "network" order.
  3641.           N    A long in "network" order.
  3642.           f    A single-precision float    in the native format.
  3643.           d    A double-precision float    in the native format.
  3644.           p    A pointer to a string.
  3645.           v    A short in "VAX"    (little-endian)    order.
  3646.           V    A long in "VAX" (little-endian) order.
  3647.           x    A null byte.
  3648.           X    Back up a byte.
  3649.           @    Null fill to absolute position.
  3650.           u    A uuencoded string.
  3651.           b    A bit string (ascending bit order, like vec()).
  3652.           B    A bit string (descending    bit order).
  3653.           h    A hex string (low nybble    first).
  3654.           H    A hex string (high nybble first).
  3655.  
  3656.          Each letter may optionally    be followed by a number
  3657.          which gives a repeat count.  With all types except
  3658.          "a", "A", "b", "B", "h" and "H", the pack function
  3659.          will gobble up that many values from the LIST.  A *
  3660.          for the repeat count means    to use however many items
  3661.          are left.    The "a"    and "A"    types gobble just one
  3662.          value, but    pack it    as a string of length count,
  3663.          padding with nulls    or spaces as necessary.     (When
  3664.          unpacking,    "A" strips trailing spaces and nulls, but
  3665.          "a" does not.)  Likewise, the "b" and "B" fields
  3666.          pack a string that    many bits long.     The "h" and "H"
  3667.          fields pack a string that many nybbles long.  Real
  3668.          numbers (floats and doubles) are in the native
  3669.          machine format only; due to the multiplicity of
  3670.          floating formats around, and the lack of a    standard
  3671.          "network" representation, no facility for
  3672.          interchange has been made.     This means that packed
  3673.          floating point data written on one    machine    may not
  3674.          be    readable on another - even if both use IEEE
  3675.          floating point arithmetic (as the endian-ness of the
  3676.          memory representation is not part of the IEEE spec).
  3677.          Note that perl uses doubles internally for    all
  3678.          numeric calculation, and converting from double ->
  3679.          float -> double will lose precision (i.e.
  3680.          unpack("f", pack("f", $foo)) will not in general
  3681.          equal $foo).
  3682.          Examples:
  3683.  
  3684.           $foo = pack("cccc",65,66,67,68);
  3685.           # foo    eq "ABCD"
  3686.           $foo = pack("c4",65,66,67,68);
  3687.           # same thing
  3688.  
  3689.           $foo = pack("ccxxcc",65,66,67,68);
  3690.  
  3691.  
  3692.  
  3693. Page 56                  Nixdorf TARGON Operating System
  3694.  
  3695.  
  3696.  
  3697.  
  3698.  
  3699.  
  3700.              Printed August 7, 1992
  3701. PERL(1)
  3702.  
  3703.  
  3704.  
  3705.           # foo    eq "AB\0\0CD"
  3706.  
  3707.           $foo = pack("s2",1,2);
  3708.           # "\1\0\2\0" on little-endian
  3709.           # "\0\1\0\2" on big-endian
  3710.  
  3711.           $foo = pack("a4","abcd","x","y","z");
  3712.           # "abcd"
  3713.  
  3714.           $foo = pack("aaaa","abcd","x","y","z");
  3715.           # "axyz"
  3716.  
  3717.           $foo = pack("a14","abcdefg");
  3718.           # "abcdefg\0\0\0\0\0\0\0"
  3719.  
  3720.           $foo = pack("i9pl", gmtime);
  3721.           # a real struct tm (on my system anyway)
  3722.  
  3723.           sub bintodec {
  3724.               unpack("N", pack("B32", substr("0" x 32 .    shift, -32)));
  3725.           }
  3726.          The same template may generally also be used in the
  3727.          unpack function.
  3728.  
  3729.      pipe(READHANDLE,WRITEHANDLE)
  3730.          Opens a pair of connected pipes like the
  3731.          corresponding system call.     Note that if you set up
  3732.          a loop of piped processes,    deadlock can occur unless
  3733.          you are very careful.  In addition, note that perl's
  3734.          pipes use stdio buffering,    so you may need    to set $|
  3735.          to    flush your WRITEHANDLE after each command,
  3736.          depending on the application.  [Requires version 3.0
  3737.          patchlevel    9.]
  3738.  
  3739.      pop(ARRAY)
  3740.  
  3741.      pop ARRAY
  3742.          Pops and returns the last value of    the array,
  3743.          shortening    the array by 1.     Has the same effect as
  3744.  
  3745.           $tmp = $ARRAY[$#ARRAY--];
  3746.  
  3747.          If    there are no elements in the array, returns the
  3748.          undefined value.
  3749.  
  3750.  
  3751.  
  3752.  
  3753.  
  3754.  
  3755.  
  3756.  
  3757.  
  3758.  
  3759. Page 57                  Nixdorf TARGON Operating System
  3760.  
  3761.  
  3762.  
  3763.  
  3764.  
  3765.  
  3766.              Printed August 7, 1992
  3767. PERL(1)
  3768.  
  3769.  
  3770.  
  3771.      print(FILEHANDLE LIST)
  3772.  
  3773.      print(LIST)
  3774.  
  3775.      print FILEHANDLE LIST
  3776.  
  3777.      print LIST
  3778.  
  3779.      print   Prints a string or    a comma-separated list of
  3780.          strings.  Returns non-zero    if successful.
  3781.          FILEHANDLE    may be a scalar    variable name, in which
  3782.          case the variable contains    the name of the
  3783.          filehandle, thus introducing one level of
  3784.          indirection.  (NOTE: If FILEHANDLE    is a variable and
  3785.          the next token is a term, it may be misinterpreted
  3786.          as    an operator unless you interpose a + or    put
  3787.          parens around the arguments.)  If FILEHANDLE is
  3788.          omitted, prints by    default    to standard output (or to
  3789.          the last selected output channel--see select()).  If
  3790.          LIST is also omitted, prints $_ to    STDOUT.     To set
  3791.          the default output    channel    to something other than
  3792.          STDOUT use    the select operation.  Note that, because
  3793.          print takes a LIST, anything in the LIST is
  3794.          evaluated in an array context, and    any subroutine
  3795.          that you call will    have one or more of its
  3796.          expressions evaluated in an array context.     Also be
  3797.          careful not to follow the print keyword with a left
  3798.          parenthesis unless    you want the corresponding right
  3799.          parenthesis to terminate the arguments to the
  3800.          print--interpose a    + or put parens    around all the
  3801.          arguments.
  3802.  
  3803.      printf(FILEHANDLE LIST)
  3804.  
  3805.      printf(LIST)
  3806.  
  3807.      printf FILEHANDLE LIST
  3808.  
  3809.      printf LIST
  3810.          Equivalent    to a "print FILEHANDLE sprintf(LIST)".
  3811.  
  3812.      push(ARRAY,LIST)
  3813.          Treats ARRAY (@ is    optional) as a stack, and pushes
  3814.          the values    of LIST    onto the end of    ARRAY.    The
  3815.          length of ARRAY increases by the length of    LIST.
  3816.          Has the same effect as
  3817.  
  3818.          for $value (LIST) {
  3819.               $ARRAY[++$#ARRAY]    = $value;
  3820.          }
  3821.  
  3822.  
  3823.  
  3824.  
  3825. Page 58                  Nixdorf TARGON Operating System
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.              Printed August 7, 1992
  3833. PERL(1)
  3834.  
  3835.  
  3836.  
  3837.          but is more efficient.
  3838.  
  3839.      q/STRING/
  3840.  
  3841.      qq/STRING/
  3842.  
  3843.      qx/STRING/
  3844.          These are not really functions, but simply    syntactic
  3845.          sugar to let you avoid putting too    many backslashes
  3846.          into quoted strings.  The q operator is a
  3847.          generalized single    quote, and the qq operator a
  3848.          generalized double    quote.    The qx operator    is a
  3849.          generalized backquote.  Any non-alphanumeric
  3850.          delimiter can be used in place of /, including
  3851.          newline.  If the delimiter    is an opening bracket or
  3852.          parenthesis, the final delimiter will be the
  3853.          corresponding closing bracket or parenthesis.
  3854.          (Embedded occurrences of the closing bracket need to
  3855.          be    backslashed as usual.)    Examples:
  3856.  
  3857.           $foo = q!I said, "You    said, 'She said    it.'"!;
  3858.           $bar = q('This is it.');
  3859.           $today = qx{ date };
  3860.           $_ .=    qq
  3861.          *** The previous line contains the    naughty    word "$&".\n
  3862.                if /(ibm|apple|awk)/;      # :-)
  3863.  
  3864.  
  3865.      rand(EXPR)
  3866.  
  3867.      rand EXPR
  3868.  
  3869.      rand    Returns a random fractional number    between    0 and the
  3870.          value of EXPR.  (EXPR should be positive.)     If EXPR
  3871.          is    omitted, returns a value between 0 and 1.  See
  3872.          also srand().
  3873.  
  3874.      read(FILEHANDLE,SCALAR,LENGTH,OFFSET)
  3875.  
  3876.      read(FILEHANDLE,SCALAR,LENGTH)
  3877.          Attempts to read LENGTH bytes of data into    variable
  3878.          SCALAR from the specified FILEHANDLE.  Returns the
  3879.          number of bytes actually read, or undef if    there was
  3880.          an    error.    SCALAR will be grown or    shrunk to the
  3881.          length actually read.  An OFFSET may be specified to
  3882.          place the read data at some other place than the
  3883.          beginning of the string.  This call is actually
  3884.          implemented in terms of stdio's fread call.  To get
  3885.          a true read system    call, see sysread.
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891. Page 59                  Nixdorf TARGON Operating System
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898.              Printed August 7, 1992
  3899. PERL(1)
  3900.  
  3901.  
  3902.  
  3903.      readdir(DIRHANDLE)
  3904.  
  3905.      readdir DIRHANDLE
  3906.          Returns the next directory    entry for a directory
  3907.          opened by opendir().  If used in an array context,
  3908.          returns all the rest of the entries in the
  3909.          directory.     If there are no more entries, returns an
  3910.          undefined value in    a scalar context or a null list
  3911.          in    an array context.
  3912.  
  3913.      readlink(EXPR)
  3914.  
  3915.      readlink EXPR
  3916.          Returns the value of a symbolic link, if symbolic
  3917.          links are implemented.  If    not, gives a fatal error.
  3918.          If    there is some system error, returns the    undefined
  3919.          value and sets $! (errno).     If EXPR is omitted, uses
  3920.          $_.
  3921.  
  3922.      recv(SOCKET,SCALAR,LEN,FLAGS)
  3923.          Receives a    message    on a socket.  Attempts to receive
  3924.          LENGTH bytes of data into variable    SCALAR from the
  3925.          specified SOCKET filehandle.  Returns the address of
  3926.          the sender, or the    undefined value    if there's an
  3927.          error.  SCALAR will be grown or shrunk to the length
  3928.          actually read.  Takes the same flags as the system
  3929.          call of the same name.
  3930.  
  3931.      redo LABEL
  3932.  
  3933.      redo    The redo command restarts the loop    block without
  3934.          evaluating    the conditional    again.    The continue
  3935.          block, if any, is not executed.  If the LABEL is
  3936.          omitted, the command refers to the    innermost
  3937.          enclosing loop.  This command is normally used by
  3938.          programs that want    to lie to themselves about what
  3939.          was just input:
  3940.  
  3941.  
  3942.  
  3943.  
  3944.  
  3945.  
  3946.  
  3947.  
  3948.  
  3949.  
  3950.  
  3951.  
  3952.  
  3953.  
  3954.  
  3955.  
  3956.  
  3957. Page 60                  Nixdorf TARGON Operating System
  3958.  
  3959.  
  3960.  
  3961.  
  3962.  
  3963.  
  3964.              Printed August 7, 1992
  3965. PERL(1)
  3966.  
  3967.  
  3968.  
  3969.           # a simpleminded Pascal comment stripper
  3970.           # (warning: assumes no { or }    in strings)
  3971.           line:    while (<STDIN>)    {
  3972.                while (s|({.*}.*){.*}|$1    |) {}
  3973.                s|{.*}| |;
  3974.                if (s|{.*| |) {
  3975.                 $front = $_;
  3976.                 while (<STDIN>) {
  3977.                  if (/}/) {    # end of comment?
  3978.                       s|^|$front{|;
  3979.                       redo line;
  3980.                  }
  3981.                 }
  3982.                }
  3983.                print;
  3984.           }
  3985.  
  3986.  
  3987.      rename(OLDNAME,NEWNAME)
  3988.          Changes the name of a file.  Returns 1 for    success,
  3989.          0 otherwise.  Will    not work across    filesystem
  3990.          boundaries.
  3991.  
  3992.      require(EXPR)
  3993.  
  3994.      require EXPR
  3995.  
  3996.      require Includes the library file specified by EXPR, or by
  3997.          $_    if EXPR    is not supplied.  Has semantics    similar
  3998.          to    the following subroutine:
  3999.  
  4000.           sub require {
  4001.               local($filename) = @_;
  4002.               return 1 if $INC{$filename};
  4003.               local($realfilename,$result);
  4004.               ITER: {
  4005.                foreach $prefix (@INC) {
  4006.                $realfilename = "$prefix/$filename";
  4007.                if (-f $realfilename) {
  4008.                 $result = do $realfilename;
  4009.                 last ITER;
  4010.                }
  4011.                }
  4012.                die "Can't find $filename in \@INC";
  4013.               }
  4014.               die $@ if    $@;
  4015.               die "$filename did not return true value"    unless $result;
  4016.               $INC{$filename} =    $realfilename;
  4017.               $result;
  4018.           }
  4019.  
  4020.  
  4021.  
  4022.  
  4023. Page 61                  Nixdorf TARGON Operating System
  4024.  
  4025.  
  4026.  
  4027.  
  4028.  
  4029.  
  4030.              Printed August 7, 1992
  4031. PERL(1)
  4032.  
  4033.  
  4034.  
  4035.          Note that the file    will not be included twice under
  4036.          the same specified    name.  The file    must return true
  4037.          as    the last statement to indicate successful
  4038.          execution of any initialization code, so it's
  4039.          customary to end such a file with "1;" unless you're
  4040.          sure it'll    return true otherwise.
  4041.  
  4042.      reset(EXPR)
  4043.  
  4044.      reset EXPR
  4045.  
  4046.      reset   Generally used in a continue block    at the end of a
  4047.          loop to clear variables and reset ?? searches so
  4048.          that they work again.  The    expression is interpreted
  4049.          as    a list of single characters (hyphens allowed for
  4050.          ranges).  All variables and arrays    beginning with
  4051.          one of those letters are reset to their pristine
  4052.          state.  If    the expression is omitted, one-match
  4053.          searches (?pattern?) are reset to match again.  Only
  4054.          resets variables or searches in the current package.
  4055.          Always returns 1.    Examples:
  4056.  
  4057.          reset 'X';     # reset all X variables
  4058.          reset 'a-z';     # reset lower case variables
  4059.          reset;         # just    reset ?? searches
  4060.  
  4061.          Note: resetting "A-Z" is not recommended since
  4062.          you'll wipe out your ARGV and ENV arrays.
  4063.  
  4064.          The use of    reset on dbm associative arrays    does not
  4065.          change the    dbm file.  (It does, however, flush any
  4066.          entries cached by perl, which may be useful if you
  4067.          are sharing the dbm file.    Then again, maybe not.)
  4068.  
  4069.      return LIST
  4070.          Returns from a subroutine with the    value specified.
  4071.          (Note that    a subroutine can automatically return the
  4072.          value of the last expression evaluated.  That's the
  4073.          preferred method--use of an explicit return is a bit
  4074.          slower.)
  4075.  
  4076.      reverse(LIST)
  4077.  
  4078.      reverse LIST
  4079.          In    an array context, returns an array value
  4080.          consisting    of the elements    of LIST    in the opposite
  4081.          order.  In    a scalar context, returns a string value
  4082.          consisting    of the bytes of    the first element of LIST
  4083.          in    the opposite order.
  4084.  
  4085.  
  4086.  
  4087.  
  4088.  
  4089. Page 62                  Nixdorf TARGON Operating System
  4090.  
  4091.  
  4092.  
  4093.  
  4094.  
  4095.  
  4096.              Printed August 7, 1992
  4097. PERL(1)
  4098.  
  4099.  
  4100.  
  4101.      rewinddir(DIRHANDLE)
  4102.  
  4103.      rewinddir DIRHANDLE
  4104.          Sets the current position to the beginning    of the
  4105.          directory for the readdir() routine on DIRHANDLE.
  4106.  
  4107.      rindex(STR,SUBSTR,POSITION)
  4108.  
  4109.      rindex(STR,SUBSTR)
  4110.          Works just    like index except that it returns the
  4111.          position of the LAST occurrence of    SUBSTR in STR.
  4112.          If    POSITION is specified, returns the last
  4113.          occurrence    at or before that position.
  4114.  
  4115.      rmdir(FILENAME)
  4116.  
  4117.      rmdir FILENAME
  4118.          Deletes the directory specified by    FILENAME if it is
  4119.          empty.  If    it succeeds it returns 1, otherwise it
  4120.          returns 0 and sets    $! (errno).  If    FILENAME is
  4121.          omitted, uses $_.
  4122.  
  4123.      s/PATTERN/REPLACEMENT/gieo
  4124.          Searches a    string for a pattern, and if found,
  4125.          replaces that pattern with    the replacement    text and
  4126.          returns the number    of substitutions made.    Otherwise
  4127.          it    returns    false (0).  The    "g" is optional, and if
  4128.          present, indicates    that all occurrences of    the
  4129.          pattern are to be replaced.  The "i" is also
  4130.          optional, and if present, indicates that matching is
  4131.          to    be done    in a case-insensitive manner.  The "e" is
  4132.          likewise optional,    and if present,    indicates that
  4133.          the replacement string is to be evaluated as an
  4134.          expression    rather than just as a double-quoted
  4135.          string.  Any non-alphanumeric delimiter may replace
  4136.          the slashes; if single quotes are used, no
  4137.          interpretation is done on the replacement string
  4138.          (the e modifier overrides this, however); if
  4139.          backquotes    are used, the replacement string is a
  4140.          command to    execute    whose output will be used as the
  4141.          actual replacement    text.  If the PATTERN is
  4142.          delimited by bracketing quotes, the REPLACEMENT has
  4143.          its own pair of quotes, which may or may not be
  4144.          bracketing    quotes,    e.g.  s(foo)(bar) or s<foo>/bar/.
  4145.          If    no string is specified via the =~ or !~    operator,
  4146.          the $_ string is searched and modified.  (The string
  4147.          specified with =~ must be a scalar    variable, an
  4148.          array element, or an assignment to    one of those,
  4149.          i.e. an lvalue.)  If the pattern contains a $ that
  4150.          looks like    a variable rather than an end-of-string
  4151.          test, the variable    will be    interpolated into the
  4152.  
  4153.  
  4154.  
  4155. Page 63                  Nixdorf TARGON Operating System
  4156.  
  4157.  
  4158.  
  4159.  
  4160.  
  4161.  
  4162.              Printed August 7, 1992
  4163. PERL(1)
  4164.  
  4165.  
  4166.  
  4167.          pattern at    run-time.  If you only want the    pattern
  4168.          compiled once the first time the variable is
  4169.          interpolated, add an "o" at the end.  If the PATTERN
  4170.          evaluates to a null string, the most recent
  4171.          successful    regular    expression is used instead.  See
  4172.          also the section on regular expressions.  Examples:
  4173.  
  4174.          s/\bgreen\b/mauve/g;       # don't change wintergreen
  4175.  
  4176.          $path =~ s|/usr/bin|/usr/local/bin|;
  4177.  
  4178.          s/Login: $foo/Login: $bar/; # run-time    pattern
  4179.  
  4180.          ($foo = $bar) =~ s/bar/foo/;
  4181.  
  4182.          $_ = 'abc123xyz';
  4183.          s/\d+/$&*2/e;          #    yields 'abc246xyz'
  4184.          s/\d+/sprintf("%5d",$&)/e;    # yields 'abc  246xyz'
  4185.          s/\w/$& x 2/eg;      #    yields 'aabbcc    224466xxyyzz'
  4186.  
  4187.          s/([^ ]*) *([^    ]*)/$2 $1/;    # reverse 1st two fields
  4188.  
  4189.          (Note the use of $    instead    of \ in    the last example.
  4190.          See section on regular expressions.)
  4191.  
  4192.      scalar(EXPR)
  4193.          Forces EXPR to be interpreted in a    scalar context
  4194.          and returns the value of EXPR.
  4195.  
  4196.      seek(FILEHANDLE,POSITION,WHENCE)
  4197.          Randomly positions    the file pointer for FILEHANDLE,
  4198.          just like the fseek() call    of stdio.  FILEHANDLE may
  4199.          be    an expression whose value gives    the name of the
  4200.          filehandle.  Returns 1 upon success, 0 otherwise.
  4201.  
  4202.      seekdir(DIRHANDLE,POS)
  4203.          Sets the current position for the readdir() routine
  4204.          on    DIRHANDLE.  POS    must be    a value    returned by
  4205.          telldir().     Has the same caveats about possible
  4206.          directory compaction as the corresponding system
  4207.          library routine.
  4208.  
  4209.      select(FILEHANDLE)
  4210.  
  4211.      select  Returns the currently selected filehandle.     Sets the
  4212.          current default filehandle    for output, if FILEHANDLE
  4213.          is    supplied.  This    has two    effects: first,    a write
  4214.          or    a print    without    a filehandle will default to this
  4215.          FILEHANDLE.  Second, references to    variables related
  4216.          to    output will refer to this output channel.  For
  4217.          example, if you have to set the top of form format
  4218.  
  4219.  
  4220.  
  4221. Page 64                  Nixdorf TARGON Operating System
  4222.  
  4223.  
  4224.  
  4225.  
  4226.  
  4227.  
  4228.              Printed August 7, 1992
  4229. PERL(1)
  4230.  
  4231.  
  4232.  
  4233.          for more than one output channel, you might do the
  4234.          following:
  4235.  
  4236.           select(REPORT1);
  4237.           $^ = 'report1_top';
  4238.           select(REPORT2);
  4239.           $^ = 'report2_top';
  4240.  
  4241.          FILEHANDLE    may be an expression whose value gives
  4242.          the name of the actual filehandle.     Thus:
  4243.  
  4244.           $oldfh = select(STDERR); $| =    1; select($oldfh);
  4245.  
  4246.  
  4247.      select(RBITS,WBITS,EBITS,TIMEOUT)
  4248.          This calls    the select system call with the    bitmasks
  4249.          specified,    which can be constructed using fileno()
  4250.          and vec(),    along these lines:
  4251.  
  4252.           $rin = $win =    $ein = '';
  4253.           vec($rin,fileno(STDIN),1) = 1;
  4254.           vec($win,fileno(STDOUT),1) = 1;
  4255.           $ein = $rin |    $win;
  4256.  
  4257.          If    you want to select on many filehandles you might
  4258.          wish to write a subroutine:
  4259.  
  4260.           sub fhbits {
  4261.               local(@fhlist) = split(' ',$_[0]);
  4262.               local($bits);
  4263.               for (@fhlist) {
  4264.                vec($bits,fileno($_),1) = 1;
  4265.               }
  4266.               $bits;
  4267.           }
  4268.           $rin = &fhbits('STDIN    TTY SOCK');
  4269.  
  4270.          The usual idiom is:
  4271.  
  4272.           ($nfound,$timeleft) =
  4273.             select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
  4274.  
  4275.          or    to block until something becomes ready:
  4276.  
  4277.           $nfound = select($rout=$rin, $wout=$win,
  4278.                  $eout=$ein, undef);
  4279.  
  4280.          Any of the    bitmasks can also be undef.  The timeout,
  4281.          if    specified, is in seconds, which    may be
  4282.          fractional.  NOTE:    not all    implementations    are
  4283.          capable of    returning the $timeleft.  If not, they
  4284.  
  4285.  
  4286.  
  4287. Page 65                  Nixdorf TARGON Operating System
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  
  4293.  
  4294.              Printed August 7, 1992
  4295. PERL(1)
  4296.  
  4297.  
  4298.  
  4299.          always return $timeleft equal to the supplied
  4300.          $timeout.
  4301.  
  4302.      semctl(ID,SEMNUM,CMD,ARG)
  4303.          Calls the System V    IPC function semctl.  If CMD is
  4304.          &IPC_STAT or &GETALL, then    ARG must be a variable
  4305.          which will    hold the returned semid_ds structure or
  4306.          semaphore value array.  Returns like ioctl: the
  4307.          undefined value for error,    "0 but true" for zero, or
  4308.          the actual    return value otherwise.
  4309.  
  4310.      semget(KEY,NSEMS,SIZE,FLAGS)
  4311.          Calls the System V    IPC function semget.  Returns the
  4312.          semaphore id, or the undefined value if there is an
  4313.          error.
  4314.  
  4315.      semop(KEY,OPSTRING)
  4316.          Calls the System V    IPC function semop to perform
  4317.          semaphore operations such as signaling and    waiting.
  4318.          OPSTRING must be a    packed array of    semop structures.
  4319.          Each semop    structure can be generated with
  4320.          'pack("sss", $semnum, $semop, $semflag)'.    The
  4321.          number of semaphore operations is implied by the
  4322.          length of OPSTRING.  Returns true if successful, or
  4323.          false if there is an error.  As an    example, the
  4324.          following code waits on semaphore $semnum of
  4325.          semaphore id $semid:
  4326.  
  4327.           $semop = pack("sss", $semnum,    -1, 0);
  4328.           die "Semaphore trouble: $!\n"    unless semop($semid, $semop);
  4329.  
  4330.          To    signal the semaphore, replace "-1" with    "1".
  4331.  
  4332.      send(SOCKET,MSG,FLAGS,TO)
  4333.  
  4334.      send(SOCKET,MSG,FLAGS)
  4335.          Sends a message on    a socket.  Takes the same flags
  4336.          as    the system call    of the same name.  On unconnected
  4337.          sockets you must specify a    destination to send TO.
  4338.          Returns the number    of characters sent, or the
  4339.          undefined value if    there is an error.
  4340.  
  4341.      setpgrp(PID,PGRP)
  4342.          Sets the current process group for    the specified
  4343.          PID, 0 for    the current process.  Will produce a
  4344.          fatal error if used on a machine that doesn't
  4345.          implement setpgrp(2).
  4346.  
  4347.      setpriority(WHICH,WHO,PRIORITY)
  4348.          Sets the current priority for a process, a    process
  4349.          group, or a user.    (See setpriority(2).)  Will
  4350.  
  4351.  
  4352.  
  4353. Page 66                  Nixdorf TARGON Operating System
  4354.  
  4355.  
  4356.  
  4357.  
  4358.  
  4359.  
  4360.              Printed August 7, 1992
  4361. PERL(1)
  4362.  
  4363.  
  4364.  
  4365.          produce a fatal error if used on a    machine    that
  4366.          doesn't implement setpriority(2).
  4367.  
  4368.      setsockopt(SOCKET,LEVEL,OPTNAME,OPTVAL)
  4369.          Sets the socket option requested.    Returns    undefined
  4370.          if    there is an error.  OPTVAL may be specified as
  4371.          undef if you don't    want to    pass an    argument.
  4372.  
  4373.      shift(ARRAY)
  4374.  
  4375.      shift ARRAY
  4376.  
  4377.      shift   Shifts the    first value of the array off and returns
  4378.          it, shortening the    array by 1 and moving everything
  4379.          down.  If there are no elements in    the array,
  4380.          returns the undefined value.  If ARRAY is omitted,
  4381.          shifts the    @ARGV array in the main    program, and the
  4382.          @_    array in subroutines.  (This is    determined
  4383.          lexically.)  See also unshift(), push() and pop().
  4384.          Shift() and unshift() do the same thing to    the left
  4385.          end of an array that push() and pop() do to the
  4386.          right end.
  4387.  
  4388.      shmctl(ID,CMD,ARG)
  4389.          Calls the System V    IPC function shmctl.  If CMD is
  4390.          &IPC_STAT,    then ARG must be a variable which will
  4391.          hold the returned shmid_ds    structure.  Returns like
  4392.          ioctl: the    undefined value    for error, "0 but true"
  4393.          for zero, or the actual return value otherwise.
  4394.  
  4395.      shmget(KEY,SIZE,FLAGS)
  4396.          Calls the System V    IPC function shmget.  Returns the
  4397.          shared memory segment id, or the undefined    value if
  4398.          there is an error.
  4399.  
  4400.      shmread(ID,VAR,POS,SIZE)
  4401.  
  4402.      shmwrite(ID,STRING,POS,SIZE)
  4403.          Reads or writes the System    V shared memory    segment
  4404.          ID    starting at position POS for size SIZE by
  4405.          attaching to it, copying in/out, and detaching from
  4406.          it.  When reading,    VAR must be a variable which will
  4407.          hold the data read.  When writing,    if STRING is too
  4408.          long, only    SIZE bytes are used; if    STRING is too
  4409.          short, nulls are written to fill out SIZE bytes.
  4410.          Return true if successful,    or false if there is an
  4411.          error.
  4412.  
  4413.      shutdown(SOCKET,HOW)
  4414.          Shuts down    a socket connection in the manner
  4415.          indicated by HOW, which has the same interpretation
  4416.  
  4417.  
  4418.  
  4419. Page 67                  Nixdorf TARGON Operating System
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.              Printed August 7, 1992
  4427. PERL(1)
  4428.  
  4429.  
  4430.  
  4431.          as    in the system call of the same name.
  4432.  
  4433.      sin(EXPR)
  4434.  
  4435.      sin EXPR
  4436.          Returns the sine of EXPR (expressed in radians).  If
  4437.          EXPR is omitted, returns sine of $_.
  4438.  
  4439.      sleep(EXPR)
  4440.  
  4441.      sleep EXPR
  4442.  
  4443.      sleep   Causes the    script to sleep    for EXPR seconds, or
  4444.          forever if    no EXPR.  May be interrupted by    sending
  4445.          the process a SIGALRM.  Returns the number    of
  4446.          seconds actually slept.  You probably cannot mix
  4447.          alarm() and sleep() calls,    since sleep() is often
  4448.          implemented using alarm().
  4449.  
  4450.      socket(SOCKET,DOMAIN,TYPE,PROTOCOL)
  4451.          Opens a socket of the specified kind and attaches it
  4452.          to    filehandle SOCKET.  DOMAIN, TYPE and PROTOCOL are
  4453.          specified the same    as for the system call of the
  4454.          same name.     You may need to run h2ph on sys/socket.h
  4455.          to    get the    proper values handy in a perl library
  4456.          file.  Return true    if successful.    See the    example
  4457.          in    the section on Interprocess Communication.
  4458.  
  4459.      socketpair(SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL)
  4460.          Creates an    unnamed    pair of    sockets    in the specified
  4461.          domain, of    the specified type.  DOMAIN, TYPE and
  4462.          PROTOCOL are specified the    same as    for the    system
  4463.          call of the same name.  If    unimplemented, yields a
  4464.          fatal error.  Return true if successful.
  4465.  
  4466.      sort(SUBROUTINE LIST)
  4467.  
  4468.      sort(LIST)
  4469.  
  4470.      sort SUBROUTINE LIST
  4471.  
  4472.      sort BLOCK    LIST
  4473.  
  4474.      sort LIST
  4475.          Sorts the LIST and    returns    the sorted array value.
  4476.          Nonexistent values    of arrays are stripped out.  If
  4477.          SUBROUTINE    or BLOCK is omitted, sorts in standard
  4478.          string comparison order.  If SUBROUTINE is
  4479.          specified,    gives the name of a subroutine that
  4480.          returns an    integer    less than, equal to, or    greater
  4481.          than 0, depending on how the elements of the array
  4482.  
  4483.  
  4484.  
  4485. Page 68                  Nixdorf TARGON Operating System
  4486.  
  4487.  
  4488.  
  4489.  
  4490.  
  4491.  
  4492.              Printed August 7, 1992
  4493. PERL(1)
  4494.  
  4495.  
  4496.  
  4497.          are to be ordered.     (The <=> and cmp operators are
  4498.          extremely useful in such routines.)  SUBROUTINE may
  4499.          be    a scalar variable name,    in which case the value
  4500.          provides the name of the subroutine to use.  In
  4501.          place of a    SUBROUTINE name, you can provide a BLOCK
  4502.          as    an anonymous, in-line sort subroutine.
  4503.  
  4504.          In    the interests of efficiency the    normal calling
  4505.          code for subroutines is bypassed, with the    following
  4506.          effects: the subroutine may not be    a recursive
  4507.          subroutine, and the two elements to be compared are
  4508.          passed into the subroutine    not via    @_ but as $a and
  4509.          $b    (see example below).  They are passed by
  4510.          reference so don't    modify $a and $b.
  4511.  
  4512.          Examples:
  4513.  
  4514.           # sort lexically
  4515.           @articles = sort @files;
  4516.  
  4517.           # same thing,    but with explicit sort routine
  4518.           @articles = sort {$a cmp $b} @files;
  4519.  
  4520.           # same thing in reversed order
  4521.           @articles = sort {$b cmp $a} @files;
  4522.  
  4523.           # sort numerically ascending
  4524.           @articles = sort {$a <=> $b} @files;
  4525.  
  4526.           # sort numerically descending
  4527.           @articles = sort {$b <=> $a} @files;
  4528.  
  4529.           # sort using explicit    subroutine name
  4530.           sub byage {
  4531.               $age{$a} <=> $age{$b};    # presuming integers
  4532.           }
  4533.           @sortedclass = sort byage @class;
  4534.  
  4535.           sub reverse {    $b cmp $a; }
  4536.           @harry = ('dog','cat','x','Cain','Abel');
  4537.           @george = ('gone','chased','yz','Punished','Axed');
  4538.           print    sort @harry;
  4539.                # prints    AbelCaincatdogx
  4540.           print    sort reverse @harry;
  4541.                # prints    xdogcatCainAbel
  4542.           print    sort @george, 'to', @harry;
  4543.                # prints    AbelAxedCainPunishedcatchaseddoggonetoxyz
  4544.  
  4545.  
  4546.  
  4547.  
  4548.  
  4549.  
  4550.  
  4551. Page 69                  Nixdorf TARGON Operating System
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.  
  4558.              Printed August 7, 1992
  4559. PERL(1)
  4560.  
  4561.  
  4562.  
  4563.      splice(ARRAY,OFFSET,LENGTH,LIST)
  4564.  
  4565.      splice(ARRAY,OFFSET,LENGTH)
  4566.  
  4567.      splice(ARRAY,OFFSET)
  4568.          Removes the elements designated by    OFFSET and LENGTH
  4569.          from an array, and    replaces them with the elements
  4570.          of    LIST, if any.  Returns the elements removed from
  4571.          the array.     The array grows or shrinks as necessary.
  4572.          If    LENGTH is omitted, removes everything from OFFSET
  4573.          onward.  The following equivalencies hold (assuming
  4574.          $[    == 0):
  4575.  
  4576.           push(@a,$x,$y)        splice(@a,$#a+1,0,$x,$y)
  4577.           pop(@a)            splice(@a,-1)
  4578.           shift(@a)            splice(@a,0,1)
  4579.           unshift(@a,$x,$y)        splice(@a,0,0,$x,$y)
  4580.           $a[$x] = $y            splice(@a,$x,1,$y);
  4581.  
  4582.          Example, assuming array lengths are passed    before arrays:
  4583.  
  4584.           sub aeq { # compare two array    values
  4585.                local(@a) = splice(@_,0,shift);
  4586.                local(@b) = splice(@_,0,shift);
  4587.                return 0    unless @a == @b;     # same len?
  4588.                while (@a) {
  4589.                return 0 if pop(@a) ne pop(@b);
  4590.                }
  4591.                return 1;
  4592.           }
  4593.           if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... }
  4594.  
  4595.  
  4596.      split(/PATTERN/,EXPR,LIMIT)
  4597.  
  4598.      split(/PATTERN/,EXPR)
  4599.  
  4600.      split(/PATTERN/)
  4601.  
  4602.      split   Splits a string into an array of strings, and
  4603.          returns it.  (If not in an    array context, returns
  4604.          the number    of fields found    and splits into    the @_
  4605.          array.  (In an array context, you can force the
  4606.          split into    @_ by using ?? as the pattern delimiters,
  4607.          but it still returns the array value.))  If EXPR is
  4608.          omitted, splits the $_ string.  If    PATTERN    is also
  4609.          omitted, splits on    whitespace (/[ \t\n]+/).
  4610.          Anything matching PATTERN is taken    to be a    delimiter
  4611.          separating    the fields.  (Note that    the delimiter may
  4612.          be    longer than one    character.)  If    LIMIT is
  4613.          specified,    splits into no more than that many fields
  4614.  
  4615.  
  4616.  
  4617. Page 70                  Nixdorf TARGON Operating System
  4618.  
  4619.  
  4620.  
  4621.  
  4622.  
  4623.  
  4624.              Printed August 7, 1992
  4625. PERL(1)
  4626.  
  4627.  
  4628.  
  4629.          (though it    may split into fewer).    If LIMIT is
  4630.          unspecified, trailing null    fields are stripped
  4631.          (which potential users of pop() would do well to
  4632.          remember).     A pattern matching the    null string (not
  4633.          to    be confused with a null    pattern    //, which is just
  4634.          one member    of the set of patterns matching    a null
  4635.          string) will split    the value of EXPR into separate
  4636.          characters    at each    point it matches that way.  For
  4637.          example:
  4638.  
  4639.           print    join(':', split(/ */, 'hi there'));
  4640.  
  4641.          produces the output 'h:i:t:h:e:r:e'.
  4642.  
  4643.          The LIMIT parameter can be    used to    partially split    a
  4644.          line
  4645.  
  4646.           ($login, $passwd, $remainder)    = split(/:/, $_, 3);
  4647.  
  4648.          (When assigning to    a list,    if LIMIT is omitted, perl
  4649.          supplies a    LIMIT one larger than the number of
  4650.          variables in the list, to avoid unnecessary work.
  4651.          For the list above    LIMIT would have been 4    by
  4652.          default.  In time critical    applications it    behooves
  4653.          you not to    split into more    fields than you    really
  4654.          need.)
  4655.  
  4656.          If    the PATTERN contains parentheses, additional
  4657.          array elements are    created    from each matching
  4658.          substring in the delimiter.
  4659.  
  4660.           split(/([,-])/,"1-10,20");
  4661.  
  4662.          produces the array    value
  4663.  
  4664.           (1,'-',10,',',20)
  4665.  
  4666.          The pattern /PATTERN/ may be replaced with    an
  4667.          expression    to specify patterns that vary at runtime.
  4668.          (To do runtime compilation    only once, use
  4669.          /$variable/o.)  As    a special case,    specifying a
  4670.          space (' ') will split on white space just    as split
  4671.          with no arguments does, but leading white space does
  4672.          NOT produce a null    first field.  Thus, split(' ')
  4673.          can be used to emulate awk's default behavior,
  4674.          whereas split(/ /)    will give you as many null
  4675.          initial fields as there are leading spaces.
  4676.  
  4677.          Example:
  4678.  
  4679.  
  4680.  
  4681.  
  4682.  
  4683. Page 71                  Nixdorf TARGON Operating System
  4684.  
  4685.  
  4686.  
  4687.  
  4688.  
  4689.  
  4690.              Printed August 7, 1992
  4691. PERL(1)
  4692.  
  4693.  
  4694.  
  4695.           open(passwd, '/etc/passwd');
  4696.           while    (<passwd>) {
  4697.                ($login,    $passwd, $uid, $gid, $gcos, $home, $shell)
  4698.                 = split(/:/);
  4699.                ...
  4700.           }
  4701.  
  4702.          (Note that    $shell above will still    have a newline on
  4703.          it.  See chop().)    See also join.
  4704.  
  4705.      sprintf(FORMAT,LIST)
  4706.          Returns a string formatted    by the usual printf
  4707.          conventions.  The * character is not supported.
  4708.  
  4709.      sqrt(EXPR)
  4710.  
  4711.      sqrt EXPR
  4712.          Return the    square root of EXPR.  If EXPR is omitted,
  4713.          returns square root of $_.
  4714.  
  4715.      srand(EXPR)
  4716.  
  4717.      srand EXPR
  4718.          Sets the random number seed for the rand operator.
  4719.          If    EXPR is    omitted, does srand(time).
  4720.  
  4721.      stat(FILEHANDLE)
  4722.  
  4723.      stat FILEHANDLE
  4724.  
  4725.      stat(EXPR)
  4726.  
  4727.      stat SCALARVARIABLE
  4728.          Returns a 13-element array    giving the statistics for
  4729.          a file, either the    file opened via    FILEHANDLE, or
  4730.          named by EXPR.  Returns a null list if the    stat
  4731.          fails.  Typically used as follows:
  4732.  
  4733.          ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
  4734.             $atime,$mtime,$ctime,$blksize,$blocks)
  4735.             = stat($filename);
  4736.  
  4737.          If    stat is    passed the special filehandle consisting
  4738.          of    an underline, no stat is done, but the current
  4739.          contents of the stat structure from the last stat or
  4740.          filetest are returned.  Example:
  4741.  
  4742.           if (-x $file && (($d)    = stat(_)) && $d < 0) {
  4743.                print "$file is executable NFS file\n";
  4744.           }
  4745.  
  4746.  
  4747.  
  4748.  
  4749. Page 72                  Nixdorf TARGON Operating System
  4750.  
  4751.  
  4752.  
  4753.  
  4754.  
  4755.  
  4756.              Printed August 7, 1992
  4757. PERL(1)
  4758.  
  4759.  
  4760.  
  4761.          (This only    works on machines for which the    device
  4762.          number is negative    under NFS.)
  4763.  
  4764.      study(SCALAR)
  4765.  
  4766.      study SCALAR
  4767.  
  4768.      study   Takes extra time to study SCALAR ($_ if unspecified)
  4769.          in    anticipation of    doing many pattern matches on the
  4770.          string before it is next modified.     This may or may
  4771.          not save time, depending on the nature and    number of
  4772.          patterns you are searching    on, and    on the
  4773.          distribution of character frequencies in the string
  4774.          to    be searched--you probably want to compare
  4775.          runtimes with and without it to see which runs
  4776.          faster.  Those loops which    scan for many short
  4777.          constant strings (including the constant parts of
  4778.          more complex patterns) will benefit most.    You may
  4779.          have only one study active    at a time--if you study    a
  4780.          different scalar the first    is "unstudied".     (The way
  4781.          study works is this: a linked list    of every
  4782.          character in the string to    be searched is made, so
  4783.          we    know, for example, where all the 'k' characters
  4784.          are.  From    each search string, the    rarest character
  4785.          is    selected, based    on some    static frequency tables
  4786.          constructed from some C programs and English text.
  4787.          Only those    places that contain this "rarest"
  4788.          character are examined.)
  4789.  
  4790.          For example, here is a loop which inserts index
  4791.          producing entries before any line containing a
  4792.          certain pattern:
  4793.  
  4794.           while    (<>) {
  4795.                study;
  4796.                print ".IX foo\n" if /\bfoo\b/;
  4797.                print ".IX bar\n" if /\bbar\b/;
  4798.                print ".IX blurfl\n" if /\bblurfl\b/;
  4799.                ...
  4800.                print;
  4801.           }
  4802.  
  4803.          In    searching for /\bfoo\b/, only those locations in
  4804.          $_    that contain 'f' will be looked    at, because 'f'
  4805.          is    rarer than 'o'.     In general, this is a big win
  4806.          except in pathological cases.  The    only question is
  4807.          whether it    saves you more time than it took to build
  4808.          the linked    list in    the first place.
  4809.  
  4810.          Note that if you have to look for strings that you
  4811.          don't know    till runtime, you can build an entire
  4812.  
  4813.  
  4814.  
  4815. Page 73                  Nixdorf TARGON Operating System
  4816.  
  4817.  
  4818.  
  4819.  
  4820.  
  4821.  
  4822.              Printed August 7, 1992
  4823. PERL(1)
  4824.  
  4825.  
  4826.  
  4827.          loop as a string and eval that to avoid recompiling
  4828.          all your patterns all the time.  Together with
  4829.          undefining    $/ to input entire files as one    record,
  4830.          this can be very fast, often faster than specialized
  4831.          programs like fgrep.  The following scans a list of
  4832.          files (@files) for    a list of words    (@words), and
  4833.          prints out    the names of those files that contain a
  4834.          match:
  4835.  
  4836.           $search = 'while (<>)    { study;';
  4837.           foreach $word    (@words) {
  4838.               $search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
  4839.           }
  4840.           $search .= "}";
  4841.           @ARGV    = @files;
  4842.           undef    $/;
  4843.           eval $search;          #    this screams
  4844.           $/ = "\n";          #    put back to normal input delim
  4845.           foreach $file    (sort keys(%seen)) {
  4846.               print $file, "\n";
  4847.           }
  4848.  
  4849.  
  4850.      substr(EXPR,OFFSET,LEN)
  4851.  
  4852.      substr(EXPR,OFFSET)
  4853.          Extracts a    substring out of EXPR and returns it.
  4854.          First character is    at offset 0, or    whatever you've
  4855.          set $[ to.     If OFFSET is negative,    starts that far
  4856.          from the end of the string.  If LEN is omitted,
  4857.          returns everything    to the end of the string.  You
  4858.          can use the substr() function as an lvalue, in which
  4859.          case EXPR must be an lvalue.  If you assign
  4860.          something shorter than LEN, the string will shrink,
  4861.          and if you    assign something longer    than LEN, the
  4862.          string will grow to accommodate it.  To keep the
  4863.          string the    same length you    may need to pad    or chop
  4864.          your value    using sprintf().
  4865.  
  4866.      symlink(OLDFILE,NEWFILE)
  4867.          Creates a new filename symbolically linked    to the
  4868.          old filename.  Returns 1 for success, 0 otherwise.
  4869.          On    systems    that don't support symbolic links,
  4870.          produces a    fatal error at run time.  To check for
  4871.          that, use eval:
  4872.  
  4873.           $symlink_exists = (eval 'symlink("","");', $@    eq '');
  4874.  
  4875.  
  4876.  
  4877.  
  4878.  
  4879.  
  4880.  
  4881. Page 74                  Nixdorf TARGON Operating System
  4882.  
  4883.  
  4884.  
  4885.  
  4886.  
  4887.  
  4888.              Printed August 7, 1992
  4889. PERL(1)
  4890.  
  4891.  
  4892.  
  4893.      syscall(LIST)
  4894.  
  4895.      syscall LIST
  4896.          Calls the system call specified as    the first element
  4897.          of    the list, passing the remaining    elements as
  4898.          arguments to the system call.  If unimplemented,
  4899.          produces a    fatal error.  The arguments are
  4900.          interpreted as follows: if    a given    argument is
  4901.          numeric, the argument is passed as    an int.     If not,
  4902.          the pointer to the    string value is    passed.     You are
  4903.          responsible to make sure a    string is pre-extended
  4904.          long enough to receive any    result that might be
  4905.          written into a string.  If    your integer arguments
  4906.          are not literals and have never been interpreted in
  4907.          a numeric context,    you may    need to    add 0 to them to
  4908.          force them    to look    like numbers.
  4909.  
  4910.           require 'syscall.ph';        # may need to run h2ph
  4911.           syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);
  4912.  
  4913.  
  4914.      sysread(FILEHANDLE,SCALAR,LENGTH,OFFSET)
  4915.  
  4916.      sysread(FILEHANDLE,SCALAR,LENGTH)
  4917.          Attempts to read LENGTH bytes of data into    variable
  4918.          SCALAR from the specified FILEHANDLE, using the
  4919.          system call read(2).  It bypasses stdio, so mixing
  4920.          this with other kinds of reads may    cause confusion.
  4921.          Returns the number    of bytes actually read,    or undef
  4922.          if    there was an error.  SCALAR will be grown or
  4923.          shrunk to the length actually read.  An OFFSET may
  4924.          be    specified to place the read data at some other
  4925.          place than    the beginning of the string.
  4926.  
  4927.      system(LIST)
  4928.  
  4929.      system LIST
  4930.          Does exactly the same thing as "exec LIST"    except
  4931.          that a fork is done first,    and the    parent process
  4932.          waits for the child process to complete.  Note that
  4933.          argument processing varies    depending on the number
  4934.          of    arguments.  The    return value is    the exit status
  4935.          of    the program as returned    by the wait() call.  To
  4936.          get the actual exit value divide by 256.  See also
  4937.          exec.
  4938.  
  4939.      syswrite(FILEHANDLE,SCALAR,LENGTH,OFFSET)
  4940.  
  4941.  
  4942.  
  4943.  
  4944.  
  4945.  
  4946.  
  4947. Page 75                  Nixdorf TARGON Operating System
  4948.  
  4949.  
  4950.  
  4951.  
  4952.  
  4953.  
  4954.              Printed August 7, 1992
  4955. PERL(1)
  4956.  
  4957.  
  4958.  
  4959.      syswrite(FILEHANDLE,SCALAR,LENGTH)
  4960.          Attempts to write LENGTH bytes of data from variable
  4961.          SCALAR to the specified FILEHANDLE, using the system
  4962.          call write(2).  It    bypasses stdio,    so mixing this
  4963.          with prints may cause confusion.  Returns the number
  4964.          of    bytes actually written,    or undef if there was an
  4965.          error.  An    OFFSET may be specified    to place the read
  4966.          data at some other    place than the beginning of the
  4967.          string.
  4968.  
  4969.      tell(FILEHANDLE)
  4970.  
  4971.      tell FILEHANDLE
  4972.  
  4973.      tell    Returns the current file position for FILEHANDLE.
  4974.          FILEHANDLE    may be an expression whose value gives
  4975.          the name of the actual filehandle.     If FILEHANDLE is
  4976.          omitted, assumes the file last read.
  4977.  
  4978.      telldir(DIRHANDLE)
  4979.  
  4980.      telldir DIRHANDLE
  4981.          Returns the current position of the readdir()
  4982.          routines on DIRHANDLE.  Value may be given    to
  4983.          seekdir() to access a particular location in a
  4984.          directory.     Has the same caveats about possible
  4985.          directory compaction as the corresponding system
  4986.          library routine.
  4987.  
  4988.      time    Returns the number    of non-leap seconds since
  4989.          00:00:00 UTC, January 1, 1970.  Suitable for feeding
  4990.          to    gmtime() and localtime().
  4991.  
  4992.      times   Returns a four-element array giving the user and
  4993.          system times, in seconds, for this    process    and the
  4994.          children of this process.
  4995.  
  4996.          ($user,$system,$cuser,$csystem) = times;
  4997.  
  4998.  
  4999.      tr/SEARCHLIST/REPLACEMENTLIST/cds
  5000.  
  5001.      y/SEARCHLIST/REPLACEMENTLIST/cds
  5002.          Translates    all occurrences    of the characters found
  5003.          in    the search list    with the corresponding character
  5004.          in    the replacement    list.  It returns the number of
  5005.          characters    replaced or deleted.  If no string is
  5006.          specified via the =~ or !~    operator, the $_ string
  5007.          is    translated.  (The string specified with    =~ must
  5008.          be    a scalar variable, an array element, or    an
  5009.          assignment    to one of those, i.e. an lvalue.)  For
  5010.  
  5011.  
  5012.  
  5013. Page 76                  Nixdorf TARGON Operating System
  5014.  
  5015.  
  5016.  
  5017.  
  5018.  
  5019.  
  5020.              Printed August 7, 1992
  5021. PERL(1)
  5022.  
  5023.  
  5024.  
  5025.          sed devotees, y is    provided as a synonym for tr.  If
  5026.          the SEARCHLIST is delimited by bracketing quotes,
  5027.          the REPLACEMENTLIST has its own pair of quotes,
  5028.          which may or may not be bracketing    quotes,    e.g.
  5029.          tr[A-Z][a-z] or tr(+-*/)/ABCD/.
  5030.  
  5031.          If    the c modifier is specified, the SEARCHLIST
  5032.          character set is complemented.  If    the d modifier is
  5033.          specified,    any characters specified by SEARCHLIST
  5034.          that are not found    in REPLACEMENTLIST are deleted.
  5035.          (Note that    this is    slightly more flexible than the
  5036.          behavior of some tr programs, which delete    anything
  5037.          they find in the SEARCHLIST, period.)  If the s
  5038.          modifier is specified, sequences of characters that
  5039.          were translated to    the same character are squashed
  5040.          down to 1 instance    of the character.
  5041.  
  5042.          If    the d modifier was used, the REPLACEMENTLIST is
  5043.          always interpreted    exactly    as specified.  Otherwise,
  5044.          if    the REPLACEMENTLIST is shorter than the
  5045.          SEARCHLIST, the final character is    replicated till
  5046.          it    is long    enough.     If the    REPLACEMENTLIST    is null,
  5047.          the SEARCHLIST is replicated.  This latter    is useful
  5048.          for counting characters in    a class, or for    squashing
  5049.          character sequences in a class.
  5050.  
  5051.          Examples:
  5052.  
  5053.          $ARGV[1] =~ y/A-Z/a-z/;   # canonicalize to lower case
  5054.  
  5055.          $cnt =    tr/*/*/;       # count the stars in    $_
  5056.  
  5057.          $cnt =    tr/0-9//;       # count the digits in $_
  5058.  
  5059.          tr/a-zA-Z//s;           # bookkeeper    -> bokeper
  5060.  
  5061.          ($HOST    = $host) =~ tr/a-z/A-Z/;
  5062.  
  5063.          y/a-zA-Z/ /cs;           # change non-alphas to single space
  5064.  
  5065.          tr/\200-\377/\0-\177/;       # delete 8th    bit
  5066.  
  5067.  
  5068.      truncate(FILEHANDLE,LENGTH)
  5069.  
  5070.      truncate(EXPR,LENGTH)
  5071.          Truncates the file    opened on FILEHANDLE, or named by
  5072.          EXPR, to the specified length.  Produces a    fatal
  5073.          error if truncate isn't implemented on your system.
  5074.  
  5075.  
  5076.  
  5077.  
  5078.  
  5079. Page 77                  Nixdorf TARGON Operating System
  5080.  
  5081.  
  5082.  
  5083.  
  5084.  
  5085.  
  5086.              Printed August 7, 1992
  5087. PERL(1)
  5088.  
  5089.  
  5090.  
  5091.      umask(EXPR)
  5092.  
  5093.      umask EXPR
  5094.  
  5095.      umask   Sets the umask for    the process and    returns    the old
  5096.          one.  If EXPR is omitted, merely returns current
  5097.          umask.
  5098.  
  5099.      undef(EXPR)
  5100.  
  5101.      undef EXPR
  5102.  
  5103.      undef   Undefines the value of EXPR, which    must be    an
  5104.          lvalue.  Use only on a scalar value, an entire
  5105.          array, or a subroutine name (using    &).  (Undef will
  5106.          probably not do what you expect on    most predefined
  5107.          variables or dbm array values.)  Always returns the
  5108.          undefined value.  You can omit the    EXPR, in which
  5109.          case nothing is undefined,    but you    still get an
  5110.          undefined value that you could, for instance, return
  5111.          from a subroutine.     Examples:
  5112.  
  5113.           undef    $foo;
  5114.           undef    $bar{'blurfl'};
  5115.           undef    @ary;
  5116.           undef    %assoc;
  5117.           undef    &mysub;
  5118.           return (wantarray ? () : undef) if $they_blew_it;
  5119.  
  5120.  
  5121.      unlink(LIST)
  5122.  
  5123.      unlink LIST
  5124.          Deletes a list of files.  Returns the number of
  5125.          files successfully    deleted.
  5126.  
  5127.           $cnt = unlink    'a', 'b', 'c';
  5128.           unlink @goners;
  5129.           unlink <*.bak>;
  5130.  
  5131.          Note: unlink will not delete directories unless you
  5132.          are superuser and the -U flag is supplied to perl.
  5133.          Even if these conditions are met, be warned that
  5134.          unlinking a directory can inflict damage on your
  5135.          filesystem.  Use rmdir instead.
  5136.  
  5137.      unpack(TEMPLATE,EXPR)
  5138.          Unpack does the reverse of    pack: it takes a string
  5139.          representing a structure and expands it out into an
  5140.          array value, returning the    array value.  (In a
  5141.          scalar context, it    merely returns the first value
  5142.  
  5143.  
  5144.  
  5145. Page 78                  Nixdorf TARGON Operating System
  5146.  
  5147.  
  5148.  
  5149.  
  5150.  
  5151.  
  5152.              Printed August 7, 1992
  5153. PERL(1)
  5154.  
  5155.  
  5156.  
  5157.          produced.)     The TEMPLATE has the same format as in
  5158.          the pack function.     Here's    a subroutine that does
  5159.          substring:
  5160.  
  5161.           sub substr {
  5162.                local($what,$where,$howmuch) = @_;
  5163.                unpack("x$where a$howmuch", $what);
  5164.           }
  5165.  
  5166.          and then there's
  5167.  
  5168.           sub ord { unpack("c",$_[0]); }
  5169.  
  5170.          In    addition, you may prefix a field with a    %<number>
  5171.          to    indicate that you want a <number>-bit checksum of
  5172.          the items instead of the items themselves.     Default
  5173.          is    a 16-bit checksum.  For    example, the following
  5174.          computes the same number as the System V sum
  5175.          program:
  5176.  
  5177.           while    (<>) {
  5178.               $checksum    += unpack("%16C*", $_);
  5179.           }
  5180.           $checksum %= 65536;
  5181.  
  5182.  
  5183.      unshift(ARRAY,LIST)
  5184.          Does the opposite of a shift.  Or the opposite of a
  5185.          push, depending on    how you    look at    it.  Prepends
  5186.          list to the front of the array, and returns the
  5187.          number of elements    in the new array.
  5188.  
  5189.           unshift(ARGV,    '-e') unless $ARGV[0] =~ /^-/;
  5190.  
  5191.  
  5192.      utime(LIST)
  5193.  
  5194.      utime LIST
  5195.          Changes the access    and modification times on each
  5196.          file of a list of files.  The first two elements of
  5197.          the list must be the NUMERICAL access and
  5198.          modification times, in that order.     Returns the
  5199.          number of files successfully changed.  The    inode
  5200.          modification time of each file is set to the current
  5201.          time.  Example of a "touch" command:
  5202.  
  5203.           #!/usr/bin/perl
  5204.           $now = time;
  5205.           utime    $now, $now, @ARGV;
  5206.  
  5207.  
  5208.  
  5209.  
  5210.  
  5211. Page 79                  Nixdorf TARGON Operating System
  5212.  
  5213.  
  5214.  
  5215.  
  5216.  
  5217.  
  5218.              Printed August 7, 1992
  5219. PERL(1)
  5220.  
  5221.  
  5222.  
  5223.      values(ASSOC_ARRAY)
  5224.  
  5225.      values ASSOC_ARRAY
  5226.          Returns a normal array consisting of all the values
  5227.          of    the named associative array.  The values are
  5228.          returned in an apparently random order, but it is
  5229.          the same order as either the keys() or each()
  5230.          function would produce on the same    array.    See also
  5231.          keys() and    each().
  5232.  
  5233.      vec(EXPR,OFFSET,BITS)
  5234.          Treats a string as    a vector of unsigned integers,
  5235.          and returns the value of the bitfield specified.
  5236.          May also be assigned to.  BITS must be a power of
  5237.          two from 1    to 32.
  5238.  
  5239.          Vectors created with vec()    can also be manipulated
  5240.          with the logical operators    |, & and ^, which will
  5241.          assume a bit vector operation is desired when both
  5242.          operands are strings.  This interpretation    is not
  5243.          enabled unless there is at    least one vec()    in your
  5244.          program, to protect older programs.
  5245.  
  5246.          To    transform a bit    vector into a string or    array of
  5247.          0's and 1's, use these:
  5248.  
  5249.           $bits    = unpack("b*", $vector);
  5250.           @bits    = split(//, unpack("b*", $vector));
  5251.  
  5252.          If    you know the exact length in bits, it can be used
  5253.          in    place of the *.
  5254.  
  5255.      wait    Waits for a child process to terminate and    returns
  5256.          the pid of    the deceased process, or -1 if there are
  5257.          no    child processes.  The status is    returned in $?.
  5258.  
  5259.      waitpid(PID,FLAGS)
  5260.          Waits for a particular child process to terminate
  5261.          and returns the pid of the    deceased process, or -1
  5262.          if    there is no such child process.     The status is
  5263.          returned in $?.  If you say
  5264.  
  5265.           require "sys/wait.h";
  5266.           ...
  5267.           waitpid(-1,&WNOHANG);
  5268.  
  5269.          then you can do a non-blocking wait for any process.
  5270.          Non-blocking wait is only available on machines
  5271.          supporting    either the waitpid (2) or wait4    (2)
  5272.          system calls.  However, waiting for a particular pid
  5273.          with FLAGS    of 0 is    implemented everywhere.     (Perl
  5274.  
  5275.  
  5276.  
  5277. Page 80                  Nixdorf TARGON Operating System
  5278.  
  5279.  
  5280.  
  5281.  
  5282.  
  5283.  
  5284.              Printed August 7, 1992
  5285. PERL(1)
  5286.  
  5287.  
  5288.  
  5289.          emulates the system call by remembering the status
  5290.          values of processes that have exited but have not
  5291.          been harvested by the Perl    script yet.)
  5292.  
  5293.      wantarray
  5294.          Returns true if the context of the    currently
  5295.          executing subroutine is looking for an array value.
  5296.          Returns false if the context is looking for a
  5297.          scalar.
  5298.  
  5299.           return wantarray ? ()    : undef;
  5300.  
  5301.  
  5302.      warn(LIST)
  5303.  
  5304.      warn LIST
  5305.          Produces a    message    on STDERR just like "die", but
  5306.          doesn't exit.
  5307.  
  5308.      write(FILEHANDLE)
  5309.  
  5310.      write(EXPR)
  5311.  
  5312.      write   Writes a formatted    record (possibly multi-line) to
  5313.          the specified file, using the format associated with
  5314.          that file.     By default the    format for a file is the
  5315.          one having    the same name is the filehandle, but the
  5316.          format for    the current output channel (see    select)
  5317.          may be set    explicitly by assigning    the name of the
  5318.          format to the $~ variable.
  5319.  
  5320.          Top of form processing is handled automatically:  if
  5321.          there is insufficient room    on the current page for
  5322.          the formatted record, the page is advanced    by
  5323.          writing a form feed, a special top-of-page    format is
  5324.          used to format the    new page header, and then the
  5325.          record is written.     By default the    top-of-page
  5326.          format is the name    of the filehandle with "_TOP"
  5327.          appended, but it may be dynamicallly set to the
  5328.          format of your choice by assigning    the name to the
  5329.          $^    variable while the filehandle is selected.  The
  5330.          number of lines remaining on the current page is in
  5331.          variable $-, which    can be set to 0    to force a new
  5332.          page.
  5333.  
  5334.          If    FILEHANDLE is unspecified, output goes to the
  5335.          current default output channel, which starts out as
  5336.          STDOUT but    may be changed by the select operator.
  5337.          If    the FILEHANDLE is an EXPR, then    the expression is
  5338.          evaluated and the resulting string    is used    to look
  5339.          up    the name of the    FILEHANDLE at run time.     For more
  5340.  
  5341.  
  5342.  
  5343. Page 81                  Nixdorf TARGON Operating System
  5344.  
  5345.  
  5346.  
  5347.  
  5348.  
  5349.  
  5350.              Printed August 7, 1992
  5351. PERL(1)
  5352.  
  5353.  
  5354.  
  5355.          on    formats, see the section on formats later on.
  5356.  
  5357.          Note that write is    NOT the    opposite of read.
  5358.  
  5359.      Precedence
  5360.  
  5361.      Perl operators have the following associativity and
  5362.      precedence:
  5363.  
  5364.      nonassoc  print printf exec system    sort reverse
  5365.             chmod chown    kill unlink utime die return
  5366.      left      ,
  5367.      right     = += -= *= etc.
  5368.      right     ?:
  5369.      nonassoc  ..
  5370.      left      ||
  5371.      left      &&
  5372.      left      | ^
  5373.      left      &
  5374.      nonassoc  == != <=> eq ne cmp
  5375.      nonassoc  < > <= >= lt gt le ge
  5376.      nonassoc  chdir exit eval reset sleep rand    umask
  5377.      nonassoc  -r -w -x    etc.
  5378.      left      << >>
  5379.      left      + - .
  5380.      left      * / % x
  5381.      left      =~ !~
  5382.      right     ! ~ and unary minus
  5383.      right     **
  5384.      nonassoc  ++ --
  5385.      left      '('
  5386.  
  5387.      As    mentioned earlier, if any list operator    (print,    etc.) or
  5388.      any unary operator    (chdir,    etc.)  is followed by a    left
  5389.      parenthesis as the    next token on the same line, the operator
  5390.      and arguments within parentheses are taken    to be of highest
  5391.      precedence, just like a normal function call.  Examples:
  5392.  
  5393.       chdir    $foo ||    die;       # (chdir $foo) || die
  5394.       chdir($foo) || die;       # (chdir $foo) || die
  5395.       chdir    ($foo) || die;       # (chdir $foo) || die
  5396.       chdir    +($foo)    || die;       # (chdir $foo) || die
  5397.  
  5398.      but, because * is higher precedence than ||:
  5399.  
  5400.       chdir    $foo * 20;       # chdir ($foo * 20)
  5401.       chdir($foo) *    20;       # (chdir $foo) * 20
  5402.       chdir    ($foo) * 20;       # (chdir $foo) * 20
  5403.       chdir    +($foo)    * 20;       # chdir ($foo * 20)
  5404.  
  5405.       rand 10 * 20;           # rand (10 *    20)
  5406.  
  5407.  
  5408.  
  5409. Page 82                  Nixdorf TARGON Operating System
  5410.  
  5411.  
  5412.  
  5413.  
  5414.  
  5415.  
  5416.              Printed August 7, 1992
  5417. PERL(1)
  5418.  
  5419.  
  5420.  
  5421.       rand(10) * 20;       # (rand 10) * 20
  5422.       rand (10) * 20;       # (rand 10) * 20
  5423.       rand +(10) * 20;       # rand (10 *    20)
  5424.  
  5425.      In    the absence of parentheses, the    precedence of list
  5426.      operators such as print, sort or chmod is either very high
  5427.      or    very low depending on whether you look at the left side
  5428.      of    operator or the    right side of it.  For example,    in
  5429.  
  5430.       @ary = (1, 3,    sort 4,    2);
  5431.       print    @ary;          #    prints 1324
  5432.  
  5433.      the commas    on the right of    the sort are evaluated before the
  5434.      sort, but the commas on the left are evaluated after.  In
  5435.      other words, list operators tend to gobble    up all the
  5436.      arguments that follow them, and then act like a simple term
  5437.      with regard to the    preceding expression.  Note that you have
  5438.      to    be careful with    parens:
  5439.  
  5440.       # These evaluate exit    before doing the print:
  5441.       print($foo, exit);  #    Obviously not what you want.
  5442.       print    $foo, exit;   #    Nor is this.
  5443.  
  5444.       # These do the print before evaluating exit:
  5445.       (print $foo),    exit; #    This is    what you want.
  5446.       print($foo), exit;  #    Or this.
  5447.       print    ($foo),    exit; #    Or even    this.
  5448.  
  5449.      Also note that
  5450.  
  5451.       print    ($foo &    255) + 1, "\n";
  5452.  
  5453.      probably doesn't do what you expect at first glance.
  5454.  
  5455.      Subroutines
  5456.  
  5457.      A subroutine may be declared as follows:
  5458.  
  5459.      sub NAME BLOCK
  5460.  
  5461.  
  5462.      Any arguments passed to the routine come in as array @_,
  5463.      that is ($_[0], $_[1], ...).  The array @_    is a local array,
  5464.      but its values are    references to the actual scalar
  5465.      parameters.  The return value of the subroutine is    the value
  5466.      of    the last expression evaluated, and can be either an array
  5467.      value or a    scalar value.  Alternately, a return statement
  5468.      may be used to specify the    returned value and exit    the
  5469.      subroutine.  To create local variables see    the local
  5470.      operator.
  5471.  
  5472.  
  5473.  
  5474.  
  5475. Page 83                  Nixdorf TARGON Operating System
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482.              Printed August 7, 1992
  5483. PERL(1)
  5484.  
  5485.  
  5486.  
  5487.      A subroutine is called using the do operator or the &
  5488.      operator.
  5489.  
  5490.      Example:
  5491.  
  5492.       sub MAX {
  5493.            local($max) = pop(@_);
  5494.            foreach $foo (@_) {
  5495.             $max = $foo    if $max    < $foo;
  5496.            }
  5497.            $max;
  5498.       }
  5499.  
  5500.       ...
  5501.       $bestday = &MAX($mon,$tue,$wed,$thu,$fri);
  5502.  
  5503.      Example:
  5504.  
  5505.       # get    a line,    combining continuation lines
  5506.       #  that start    with whitespace
  5507.       sub get_line {
  5508.            $thisline = $lookahead;
  5509.            line: while ($lookahead = <STDIN>) {
  5510.             if ($lookahead =~ /^[ \t]/)    {
  5511.              $thisline .= $lookahead;
  5512.             }
  5513.             else {
  5514.              last line;
  5515.             }
  5516.            }
  5517.            $thisline;
  5518.       }
  5519.  
  5520.       $lookahead = <STDIN>;       # get first line
  5521.       while    ($_ = do get_line()) {
  5522.            ...
  5523.       }
  5524.  
  5525.      Use array assignment to a local list to name your formal arguments:
  5526.  
  5527.       sub maybeset {
  5528.            local($key, $value) = @_;
  5529.            $foo{$key} = $value unless $foo{$key};
  5530.       }
  5531.  
  5532.      This also has the effect of turning call-by-reference into
  5533.      call-by-value, since the assignment copies    the values.
  5534.  
  5535.      Subroutines may be    called recursively.  If    a subroutine is
  5536.      called using the &    form, the argument list    is optional.  If
  5537.      omitted, no @_ array is set up for    the subroutine;    the @_
  5538.  
  5539.  
  5540.  
  5541. Page 84                  Nixdorf TARGON Operating System
  5542.  
  5543.  
  5544.  
  5545.  
  5546.  
  5547.  
  5548.              Printed August 7, 1992
  5549. PERL(1)
  5550.  
  5551.  
  5552.  
  5553.      array at the time of the call is visible to subroutine
  5554.      instead.
  5555.  
  5556.       do foo(1,2,3);      #    pass three arguments
  5557.       &foo(1,2,3);          #    the same
  5558.  
  5559.       do foo();     # pass    a null list
  5560.       &foo();          #    the same
  5561.       &foo;              #    pass no    arguments--more    efficient
  5562.  
  5563.  
  5564.      Passing By    Reference
  5565.  
  5566.      Sometimes you don't want to pass the value    of an array to a
  5567.      subroutine    but rather the name of it, so that the subroutine
  5568.      can modify    the global copy    of it rather than working with a
  5569.      local copy.  In perl you can refer    to all the objects of a
  5570.      particular    name by    prefixing the name with    a star:    *foo.
  5571.      When evaluated, it    produces a scalar value    that represents
  5572.      all the objects of    that name, including any filehandle,
  5573.      format or subroutine.  When assigned to within a local()
  5574.      operation,    it causes the name mentioned to    refer to whatever
  5575.      * value was assigned to it.  Example:
  5576.  
  5577.       sub doubleary    {
  5578.           local(*someary) =    @_;
  5579.           foreach $elem (@someary) {
  5580.            $elem *=    2;
  5581.           }
  5582.       }
  5583.       do doubleary(*foo);
  5584.       do doubleary(*bar);
  5585.  
  5586.      Assignment    to *name is currently recommended only inside a
  5587.      local().  You can actually    assign to *name    anywhere, but the
  5588.      previous referent of *name    may be stranded    forever.  This
  5589.      may or may    not bother you.
  5590.  
  5591.      Note that scalars are already passed by reference,    so you
  5592.      can modify    scalar arguments without using this mechanism by
  5593.      referring explicitly to the $_[nnn] in question.  You can
  5594.      modify all    the elements of    an array by passing all    the
  5595.      elements as scalars, but you have to use the * mechanism to
  5596.      push, pop or change the size of an    array.    The * mechanism
  5597.      will probably be more efficient in    any case.
  5598.  
  5599.      Since a *name value contains unprintable binary data, if it
  5600.      is    used as    an argument in a print,    or as a    %s argument in a
  5601.      printf or sprintf,    it then    has the    value '*name', just so it
  5602.      prints out    pretty.
  5603.  
  5604.  
  5605.  
  5606.  
  5607. Page 85                  Nixdorf TARGON Operating System
  5608.  
  5609.  
  5610.  
  5611.  
  5612.  
  5613.  
  5614.              Printed August 7, 1992
  5615. PERL(1)
  5616.  
  5617.  
  5618.  
  5619.      Even if you don't want to modify an array,    this mechanism is
  5620.      useful for    passing    multiple arrays    in a single LIST, since
  5621.      normally the LIST mechanism will merge all    the array values
  5622.      so    that you can't extract out the individual arrays.
  5623.  
  5624.      Regular Expressions
  5625.  
  5626.      The patterns used in pattern matching are regular
  5627.      expressions such as those supplied    in the Version 8 regexp
  5628.      routines.    (In fact, the routines are derived from    Henry
  5629.      Spencer's freely redistributable reimplementation of the V8
  5630.      routines.)     In addition, \w matches an alphanumeric
  5631.      character (including "_") and \W a    nonalphanumeric.  Word
  5632.      boundaries    may be matched by \b, and non-boundaries by \B.
  5633.      A whitespace character is matched by \s, non-whitespace by
  5634.      \S.  A numeric character is matched by \d,    non-numeric by
  5635.      \D.  You may use \w, \s and \d within character classes.
  5636.      Also, \n, \r, \f, \t and \NNN have    their normal
  5637.      interpretations.  Within character    classes    \b represents
  5638.      backspace rather than a word boundary.  Alternatives may be
  5639.      separated by |.  The bracketing construct ( ... ) may also
  5640.      be    used, in which case \<digit> matches the digit'th
  5641.      substring.     (Outside of the pattern, always use $ instead of
  5642.      \ in front    of the digit.  The scope of $<digit> (and $`, $&
  5643.      and $') extends to    the end    of the enclosing BLOCK or eval
  5644.      string, or    to the next pattern match with subexpressions.
  5645.      The \<digit> notation sometimes works outside the current
  5646.      pattern, but should not be    relied upon.)  You may have as
  5647.      many parentheses as you wish.  If you have    more than 9
  5648.      substrings, the variables $10, $11, ... refer to the
  5649.      corresponding substring.  Within the pattern, \10,    \11, etc.
  5650.      refer back    to substrings if there have been at least that
  5651.      many left parens before the backreference.     Otherwise (for
  5652.      backward compatibilty) \10    is the same as \010, a backspace,
  5653.      and \11 the same as \011, a tab.  And so on.  (\1 through \9
  5654.      are always    backreferences.)
  5655.  
  5656.      $+    returns    whatever the last bracket match    matched.  $&
  5657.      returns the entire    matched    string.     ($0 used to return the
  5658.      same thing, but not any more.)  $`    returns    everything before
  5659.      the matched string.  $' returns everything    after the matched
  5660.      string.  Examples:
  5661.  
  5662.       s/^([^ ]*) *([^ ]*)/$2 $1/;    # swap first two words
  5663.  
  5664.       if (/Time: (..):(..):(..)/) {
  5665.            $hours =    $1;
  5666.            $minutes    = $2;
  5667.            $seconds    = $3;
  5668.       }
  5669.  
  5670.  
  5671.  
  5672.  
  5673. Page 86                  Nixdorf TARGON Operating System
  5674.  
  5675.  
  5676.  
  5677.  
  5678.  
  5679.  
  5680.              Printed August 7, 1992
  5681. PERL(1)
  5682.  
  5683.  
  5684.  
  5685.      By    default, the ^ character is only guaranteed to match at
  5686.      the beginning of the string, the $    character only at the end
  5687.      (or before    the newline at the end)    and perl does certain
  5688.      optimizations with    the assumption that the    string contains
  5689.      only one line.  The behavior of ^ and $ on    embedded newlines
  5690.      will be inconsistent.  You    may, however, wish to treat a
  5691.      string as a multi-line buffer, such that the ^ will match
  5692.      after any newline within the string, and $    will match before
  5693.      any newline.  At the cost of a little more    overhead, you can
  5694.      do    this by    setting    the variable $*    to 1.  Setting it back to
  5695.      0 makes perl revert to its    old behavior.
  5696.  
  5697.      To    facilitate multi-line substitutions, the . character
  5698.      never matches a newline (even when    $* is 0).  In particular,
  5699.      the following leaves a newline on the $_ string:
  5700.  
  5701.       $_ = <STDIN>;
  5702.       s/.*(some_string).*/$1/;
  5703.  
  5704.      If    the newline is unwanted, try one of
  5705.  
  5706.       s/.*(some_string).*\n/$1/;
  5707.       s/.*(some_string)[^\000]*/$1/;
  5708.       s/.*(some_string)(.|\n)*/$1/;
  5709.       chop;    s/.*(some_string).*/$1/;
  5710.       /(some_string)/ && ($_ = $1);
  5711.  
  5712.      Any item of a regular expression may be followed with digits
  5713.      in    curly brackets of the form {n,m}, where    n gives    the
  5714.      minimum number of times to    match the item and m gives the
  5715.      maximum.  The form    {n} is equivalent to {n,n} and matches
  5716.      exactly n times.  The form    {n,} matches n or more times.
  5717.      (If a curly bracket occurs    in any other context, it is
  5718.      treated as    a regular character.)  The * modifier is
  5719.      equivalent    to {0,}, the + modifier    to {1,}    and the    ?
  5720.      modifier to {0,1}.     There is no limit to the size of n or m,
  5721.      but large numbers will chew up more memory.
  5722.  
  5723.      You will note that    all backslashed    metacharacters in perl
  5724.      are alphanumeric, such as \b, \w, \n.  Unlike some    other
  5725.      regular expression    languages, there are no    backslashed
  5726.      symbols that aren't alphanumeric.    So anything that looks
  5727.      like \\, \(, \), \<, \>, \{, or \}    is always interpreted as
  5728.      a literal character, not a    metacharacter.    This makes it
  5729.      simple to quote a string that you want to use for a pattern
  5730.      but that you are afraid might contain metacharacters.
  5731.      Simply quote all the non-alphanumeric characters:
  5732.  
  5733.       $pattern =~ s/(\W)/\\$1/g;
  5734.  
  5735.  
  5736.  
  5737.  
  5738.  
  5739. Page 87                  Nixdorf TARGON Operating System
  5740.  
  5741.  
  5742.  
  5743.  
  5744.  
  5745.  
  5746.              Printed August 7, 1992
  5747. PERL(1)
  5748.  
  5749.  
  5750.  
  5751.      Formats
  5752.  
  5753.      Output record formats for use with    the write operator may
  5754.      declared as follows:
  5755.  
  5756.      format    NAME =
  5757.      FORMLIST
  5758.      .
  5759.  
  5760.      If    name is    omitted, format    "STDOUT" is defined.  FORMLIST
  5761.      consists of a sequence of lines, each of which may    be of one
  5762.      of    three types:
  5763.  
  5764.      1.     A comment.
  5765.  
  5766.      2.     A "picture" line giving the format for    one output line.
  5767.  
  5768.      3.     An argument line supplying values to plug into    a picture
  5769.      line.
  5770.  
  5771.      Picture lines are printed exactly as they look, except for
  5772.      certain fields that substitute values into    the line.  Each
  5773.      picture field starts with either @    or ^.  The @ field (not
  5774.      to    be confused with the array marker @) is    the normal case;
  5775.      ^ fields are used to do rudimentary multi-line text block
  5776.      filling.  The length of the field is supplied by padding out
  5777.      the field with multiple <,    >, or |    characters to specify,
  5778.      respectively, left    justification, right justification, or
  5779.      centering.     As an alternate form of right justification, you
  5780.      may also use # characters (with an    optional .) to specify a
  5781.      numeric field.  (Use of ^ instead of @ causes the field to
  5782.      be    blanked    if undefined.)    If any of the values supplied for
  5783.      these fields contains a newline, only the text up to the
  5784.      newline is    printed.  The special field @* can be used for
  5785.      printing multi-line values.  It should appear by itself on    a
  5786.      line.
  5787.  
  5788.      The values    are specified on the following line, in    the same
  5789.      order as the picture fields.  The values should be    separated
  5790.      by    commas.
  5791.  
  5792.      Picture fields that begin with ^ rather than @ are    treated
  5793.      specially.     The value supplied must be a scalar variable
  5794.      name which    contains a text    string.     Perl puts as much text
  5795.      as    it can into the    field, and then    chops off the front of
  5796.      the string    so that    the next time the variable is referenced,
  5797.      more of the text can be printed.  Normally    you would use a
  5798.      sequence of fields    in a vertical stack to print out a block
  5799.      of    text.  If you like, you    can end    the final field    with ...,
  5800.      which will    appear in the output if    the text was too long to
  5801.      appear in its entirety.  You can change which characters are
  5802.  
  5803.  
  5804.  
  5805. Page 88                  Nixdorf TARGON Operating System
  5806.  
  5807.  
  5808.  
  5809.  
  5810.  
  5811.  
  5812.              Printed August 7, 1992
  5813. PERL(1)
  5814.  
  5815.  
  5816.  
  5817.      legal to break on by changing the variable    $: to a    list of
  5818.      the desired characters.
  5819.  
  5820.      Since use of ^ fields can produce variable    length records if
  5821.      the text to be formatted is short,    you can    suppress blank
  5822.      lines by putting the tilde    (~) character anywhere in the
  5823.      line.  (Normally you should put it    in the front if    possible,
  5824.      for visibility.)  The tilde will be translated to a space
  5825.      upon output.  If you put a    second tilde contiguous    to the
  5826.      first, the    line will be repeated until all    the fields on the
  5827.      line are exhausted.  (If you use a    field of the @ variety,
  5828.      the expression you    supply had better not give the same value
  5829.      every time    forever!)
  5830.  
  5831.      Examples:
  5832.  
  5833.      # a report    on the /etc/passwd file
  5834.      format STDOUT_TOP =
  5835.                  Passwd File
  5836.      Name         Login      Office   Uid     Gid Home
  5837.      ------------------------------------------------------------------
  5838.      .
  5839.      format STDOUT =
  5840.      @<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
  5841.      $name,         $login,  $office,$uid,$gid, $home
  5842.      .
  5843.  
  5844.  
  5845.  
  5846.  
  5847.  
  5848.  
  5849.  
  5850.  
  5851.  
  5852.  
  5853.  
  5854.  
  5855.  
  5856.  
  5857.  
  5858.  
  5859.  
  5860.  
  5861.  
  5862.  
  5863.  
  5864.  
  5865.  
  5866.  
  5867.  
  5868.  
  5869.  
  5870.  
  5871. Page 89                  Nixdorf TARGON Operating System
  5872.  
  5873.  
  5874.  
  5875.  
  5876.  
  5877.  
  5878.              Printed August 7, 1992
  5879. PERL(1)
  5880.  
  5881.  
  5882.  
  5883.      # a report    from a bug report form
  5884.      format STDOUT_TOP =
  5885.                  Bug Reports
  5886.      @<<<<<<<<<<<<<<<<<<<<<<<      @|||           @>>>>>>>>>>>>>>>>>>>>>>>
  5887.      $system,               $%,           $date
  5888.      ------------------------------------------------------------------
  5889.      .
  5890.      format STDOUT =
  5891.      Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5892.           $subject
  5893.      Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5894.         $index,              $description
  5895.      Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5896.            $priority,     $date,      $description
  5897.      From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5898.        $from,              $description
  5899.      Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5900.           $programmer,          $description
  5901.      ~                      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5902.                       $description
  5903.      ~                      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5904.                       $description
  5905.      ~                      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5906.                       $description
  5907.      ~                      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5908.                       $description
  5909.      ~                      ^<<<<<<<<<<<<<<<<<<<<<<<...
  5910.                       $description
  5911.      .
  5912.  
  5913.      It    is possible to intermix    prints with writes on the same
  5914.      output channel, but you'll    have to    handle $- (lines left on
  5915.      the page) yourself.
  5916.  
  5917.      If    you are    printing lots of fields    that are usually blank,
  5918.      you should    consider using the reset operator between
  5919.      records.  Not only    is it more efficient, but it can prevent
  5920.      the bug of    adding another field and forgetting to zero it.
  5921.  
  5922.      Interprocess Communication
  5923.  
  5924.      The IPC facilities    of perl    are built on the Berkeley socket
  5925.      mechanism.     If you    don't have sockets, you    can ignore this
  5926.      section.  The calls have the same names as    the corresponding
  5927.      system calls, but the arguments tend to differ, for two
  5928.      reasons.  First, perl file    handles    work differently than C
  5929.      file descriptors.    Second,    perl already knows the length of
  5930.      its strings, so you don't need to pass that information.
  5931.      Here is a sample client (untested):
  5932.  
  5933.       ($them,$port)    = @ARGV;
  5934.  
  5935.  
  5936.  
  5937. Page 90                  Nixdorf TARGON Operating System
  5938.  
  5939.  
  5940.  
  5941.  
  5942.  
  5943.  
  5944.              Printed August 7, 1992
  5945. PERL(1)
  5946.  
  5947.  
  5948.  
  5949.       $port    = 2345 unless $port;
  5950.       $them    = 'localhost' unless $them;
  5951.  
  5952.       $SIG{'INT'} =    'dokill';
  5953.       sub dokill { kill 9,$child if    $child;    }
  5954.  
  5955.       require 'sys/socket.ph';
  5956.  
  5957.       $sockaddr = 'S n a4 x8';
  5958.       chop($hostname = `hostname`);
  5959.  
  5960.       ($name, $aliases, $proto) = getprotobyname('tcp');
  5961.       ($name, $aliases, $port) = getservbyname($port, 'tcp')
  5962.            unless $port =~ /^\d+$/;
  5963.       ($name, $aliases, $type, $len, $thisaddr) =
  5964.                   gethostbyname($hostname);
  5965.       ($name, $aliases, $type, $len, $thataddr) = gethostbyname($them);
  5966.  
  5967.       $this    = pack($sockaddr, &AF_INET, 0, $thisaddr);
  5968.       $that    = pack($sockaddr, &AF_INET, $port, $thataddr);
  5969.  
  5970.       socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!";
  5971.       bind(S, $this) || die    "bind: $!";
  5972.       connect(S, $that) || die "connect: $!";
  5973.  
  5974.       select(S); $|    = 1; select(stdout);
  5975.  
  5976.       if ($child = fork) {
  5977.            while (<>) {
  5978.             print S;
  5979.            }
  5980.            sleep 3;
  5981.            do dokill();
  5982.       }
  5983.       else {
  5984.            while (<S>) {
  5985.             print;
  5986.            }
  5987.       }
  5988.  
  5989.      And here's    a server:
  5990.  
  5991.       ($port) = @ARGV;
  5992.       $port    = 2345 unless $port;
  5993.  
  5994.       require 'sys/socket.ph';
  5995.  
  5996.       $sockaddr = 'S n a4 x8';
  5997.  
  5998.       ($name, $aliases, $proto) = getprotobyname('tcp');
  5999.       ($name, $aliases, $port) = getservbyname($port, 'tcp')
  6000.  
  6001.  
  6002.  
  6003. Page 91                  Nixdorf TARGON Operating System
  6004.  
  6005.  
  6006.  
  6007.  
  6008.  
  6009.  
  6010.              Printed August 7, 1992
  6011. PERL(1)
  6012.  
  6013.  
  6014.  
  6015.            unless $port =~ /^\d+$/;
  6016.  
  6017.       $this    = pack($sockaddr, &AF_INET, $port, "\0\0\0\0");
  6018.  
  6019.       select(NS); $| = 1; select(stdout);
  6020.  
  6021.       socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!";
  6022.       bind(S, $this) || die    "bind: $!";
  6023.       listen(S, 5) || die "connect:    $!";
  6024.  
  6025.       select(S); $|    = 1; select(stdout);
  6026.  
  6027.       for (;;) {
  6028.            print "Listening    again\n";
  6029.            ($addr =    accept(NS,S)) || die $!;
  6030.            print "accept ok\n";
  6031.  
  6032.            ($af,$port,$inetaddr) = unpack($sockaddr,$addr);
  6033.            @inetaddr = unpack('C4',$inetaddr);
  6034.            print "$af $port    @inetaddr\n";
  6035.  
  6036.            while (<NS>) {
  6037.             print;
  6038.             print NS;
  6039.            }
  6040.       }
  6041.  
  6042.  
  6043.      Predefined    Names
  6044.  
  6045.      The following names have special meaning to perl.    I could
  6046.      have used alphabetic symbols for some of these, but I didn't
  6047.      want to take the chance that someone would    say reset
  6048.      "a-zA-Z" and wipe them all    out.  You'll just have to suffer
  6049.      along with    these silly symbols.  Most of them have
  6050.      reasonable    mnemonics, or analogues    in one of the shells.
  6051.  
  6052.      $_         The default input and pattern-searching space.  The
  6053.          following pairs are equivalent:
  6054.  
  6055.           while    (<>) {...     #    only equivalent    in while!
  6056.           while    ($_ = <>) {...
  6057.  
  6058.           /^Subject:/
  6059.           $_ =~    /^Subject:/
  6060.  
  6061.           y/a-z/A-Z/
  6062.           $_ =~    y/a-z/A-Z/
  6063.  
  6064.           chop
  6065.           chop($_)
  6066.  
  6067.  
  6068.  
  6069. Page 92                  Nixdorf TARGON Operating System
  6070.  
  6071.  
  6072.  
  6073.  
  6074.  
  6075.  
  6076.              Printed August 7, 1992
  6077. PERL(1)
  6078.  
  6079.  
  6080.  
  6081.          (Mnemonic:    underline is understood    in certain
  6082.          operations.)
  6083.  
  6084.      $.         The current input line number of the last filehandle
  6085.          that was read.  Readonly.    Remember that only an
  6086.          explicit close on the filehandle resets the line
  6087.          number.  Since <> never does an explicit close, line
  6088.          numbers increase across ARGV files    (but see examples
  6089.          under eof).  (Mnemonic: many programs use . to mean
  6090.          the current line number.)
  6091.  
  6092.      $/         The input record separator, newline by default.
  6093.          Works like    awk's RS variable, including treating
  6094.          blank lines as delimiters if set to the null string.
  6095.          You may set it to a multicharacter    string to match    a
  6096.          multi-character delimiter.     Note that setting it to
  6097.          "\n\n" means something slightly different than
  6098.          setting it    to "", if the file contains consecutive
  6099.          blank lines.  Setting it to "" will treat two or
  6100.          more consecutive blank lines as a single blank line.
  6101.          Setting it    to "\n\n" will blindly assume that the
  6102.          next input    character belongs to the next paragraph,
  6103.          even if it's a newline.  (Mnemonic: / is used to
  6104.          delimit line boundaries when quoting poetry.)
  6105.  
  6106.      $,         The output    field separator    for the    print operator.
  6107.          Ordinarily    the print operator simply prints out the
  6108.          comma separated fields you    specify.  In order to get
  6109.          behavior more like    awk, set this variable as you
  6110.          would set awk's OFS variable to specify what is
  6111.          printed between fields.  (Mnemonic: what is printed
  6112.          when there    is a , in your print statement.)
  6113.  
  6114.      $"         This is like $, except that it applies to array
  6115.          values interpolated into a    double-quoted string (or
  6116.          similar interpreted string).  Default is a    space.
  6117.          (Mnemonic:    obvious, I think.)
  6118.  
  6119.      $\         The output    record separator for the print operator.
  6120.          Ordinarily    the print operator simply prints out the
  6121.          comma separated fields you    specify, with no trailing
  6122.          newline or    record separator assumed.  In order to
  6123.          get behavior more like awk, set this variable as you
  6124.          would set awk's ORS variable to specify what is
  6125.          printed at    the end    of the print.  (Mnemonic: you set
  6126.          $\    instead    of adding \n at    the end    of the print.
  6127.          Also, it's    just like /, but it's what you get "back"
  6128.          from perl.)
  6129.  
  6130.      $#         The output    format for printed numbers.  This
  6131.          variable is a half-hearted    attempt    to emulate awk's
  6132.  
  6133.  
  6134.  
  6135. Page 93                  Nixdorf TARGON Operating System
  6136.  
  6137.  
  6138.  
  6139.  
  6140.  
  6141.  
  6142.              Printed August 7, 1992
  6143. PERL(1)
  6144.  
  6145.  
  6146.  
  6147.          OFMT variable.  There are times, however, when awk
  6148.          and perl have differing notions of    what is    in fact
  6149.          numeric.  Also, the initial value is %.20g    rather
  6150.          than %.6g,    so you need to set $# explicitly to get
  6151.          awk's value.  (Mnemonic: #    is the number sign.)
  6152.  
  6153.      $%         The current page number of    the currently selected
  6154.          output channel.  (Mnemonic: % is page number in
  6155.          nroff.)
  6156.  
  6157.      $=         The current page length (printable    lines) of the
  6158.          currently selected    output channel.     Default is 60.
  6159.          (Mnemonic:    = has horizontal lines.)
  6160.  
  6161.      $-         The number    of lines left on the page of the
  6162.          currently selected    output channel.     (Mnemonic:
  6163.          lines_on_page - lines_printed.)
  6164.  
  6165.      $~         The name of the current report format for the
  6166.          currently selected    output channel.     Default is name
  6167.          of    the filehandle.     (Mnemonic: brother to $^.)
  6168.  
  6169.      $^         The name of the current top-of-page format    for the
  6170.          currently selected    output channel.     Default is name
  6171.          of    the filehandle with "_TOP" appended.  (Mnemonic:
  6172.          points to top of page.)
  6173.  
  6174.      $|         If    set to nonzero,    forces a flush after every write
  6175.          or    print on the currently selected    output channel.
  6176.          Default is    0.  Note that STDOUT will typically be
  6177.          line buffered if output is    to the terminal    and block
  6178.          buffered otherwise.  Setting this variable    is useful
  6179.          primarily when you    are outputting to a pipe, such as
  6180.          when you are running a perl script    under rsh and
  6181.          want to see the output as it's happening.
  6182.          (Mnemonic:    when you want your pipes to be piping
  6183.          hot.)
  6184.  
  6185.      $$         The process number    of the perl running this script.
  6186.          (Mnemonic:    same as    shells.)
  6187.  
  6188.      $?         The status    returned by the    last pipe close, backtick
  6189.          (``) command or system operator.  Note that this is
  6190.          the status    word returned by the wait() system call,
  6191.          so    the exit value of the subprocess is actually ($?
  6192.          >>    8).  $?    & 255 gives which signal, if any, the
  6193.          process died from,    and whether there was a    core
  6194.          dump.  (Mnemonic: similar to sh and ksh.)
  6195.  
  6196.  
  6197.  
  6198.  
  6199.  
  6200.  
  6201. Page 94                  Nixdorf TARGON Operating System
  6202.  
  6203.  
  6204.  
  6205.  
  6206.  
  6207.  
  6208.              Printed August 7, 1992
  6209. PERL(1)
  6210.  
  6211.  
  6212.  
  6213.      $&         The string    matched    by the last successful pattern
  6214.          match (not    counting any matches hidden within a
  6215.          BLOCK or eval enclosed by the current BLOCK).
  6216.          (Mnemonic:    like & in some editors.)
  6217.  
  6218.      $`         The string    preceding whatever was matched by the
  6219.          last successful pattern match (not    counting any
  6220.          matches hidden within a BLOCK or eval enclosed by
  6221.          the current BLOCK).  (Mnemonic: ` often precedes a
  6222.          quoted string.)
  6223.  
  6224.      $'         The string    following whatever was matched by the
  6225.          last successful pattern match (not    counting any
  6226.          matches hidden within a BLOCK or eval enclosed by
  6227.          the current BLOCK).  (Mnemonic: ' often follows a
  6228.          quoted string.)  Example:
  6229.  
  6230.           $_ = 'abcdefghi';
  6231.           /def/;
  6232.           print    "$`:$&:$'\n";       # prints abc:def:ghi
  6233.  
  6234.  
  6235.      $+         The last bracket matched by the last search pattern.
  6236.          This is useful if you don't know which of a set of
  6237.          alternative patterns matched.  For    example:
  6238.  
  6239.          /Version: (.*)|Revision: (.*)/    && ($rev = $+);
  6240.  
  6241.          (Mnemonic:    be positive and    forward    looking.)
  6242.  
  6243.      $*         Set to 1 to do multiline matching within a    string,    0
  6244.          to    tell perl that it can assume that strings contain
  6245.          a single line, for    the purpose of optimizing pattern
  6246.          matches.  Pattern matches on strings containing
  6247.          multiple newlines can produce confusing results when
  6248.          $*    is 0.  Default is 0.  (Mnemonic: * matches
  6249.          multiple things.)    Note that this variable    only
  6250.          influences    the interpretation of ^    and $.    A literal
  6251.          newline can be searched for even when $* == 0.
  6252.  
  6253.      $0         Contains the name of the file containing the perl
  6254.          script being executed.  Assigning to $0 modifies the
  6255.          argument area that    the ps(1) program sees.
  6256.          (Mnemonic:    same as    sh and ksh.)
  6257.  
  6258.      $<digit>
  6259.          Contains the subpattern from the corresponding set
  6260.          of    parentheses in the last    pattern    matched, not
  6261.          counting patterns matched in nested blocks    that have
  6262.          been exited already.  (Mnemonic: like \digit.)
  6263.  
  6264.  
  6265.  
  6266.  
  6267. Page 95                  Nixdorf TARGON Operating System
  6268.  
  6269.  
  6270.  
  6271.  
  6272.  
  6273.  
  6274.              Printed August 7, 1992
  6275. PERL(1)
  6276.  
  6277.  
  6278.  
  6279.      $[         The index of the first element in an array, and of
  6280.          the first character in a substring.  Default is 0,
  6281.          but you could set it to 1 to make perl behave more
  6282.          like awk (or Fortran) when    subscripting and when
  6283.          evaluating    the index() and    substr() functions.
  6284.          (Mnemonic:    [ begins subscripts.)
  6285.  
  6286.      $]         The string    printed    out when you say "perl -v".  It
  6287.          can be used to determine at the beginning of a
  6288.          script whether the    perl interpreter executing the
  6289.          script is in the right range of versions.    If used
  6290.          in    a numeric context, returns the version +
  6291.          patchlevel    / 1000.     Example:
  6292.  
  6293.           # see    if getc    is available
  6294.              ($version,$patchlevel) =
  6295.             $] =~ /(\d+\.\d+).*\nPatch level: (\d+)/;
  6296.              print STDERR "(No filename    completion available.)\n"
  6297.             if $version * 1000 + $patchlevel < 2016;
  6298.  
  6299.          or, used numerically,
  6300.  
  6301.           warn "No checksumming!\n" if $] < 3.019;
  6302.  
  6303.          (Mnemonic:    Is this    version    of perl    in the right
  6304.          bracket?)
  6305.  
  6306.      $;         The subscript separator for multi-dimensional array
  6307.          emulation.     If you    refer to an associative    array
  6308.          element as
  6309.           $foo{$a,$b,$c}
  6310.  
  6311.          it    really means
  6312.  
  6313.           $foo{join($;,    $a, $b,    $c)}
  6314.  
  6315.          But don't put
  6316.  
  6317.           @foo{$a,$b,$c}      #    a slice--note the @
  6318.  
  6319.          which means
  6320.  
  6321.           ($foo{$a},$foo{$b},$foo{$c})
  6322.  
  6323.          Default is    "\034",    the same as SUBSEP in awk.  Note
  6324.          that if your keys contain binary data there might
  6325.          not be any    safe value for $;.  (Mnemonic: comma (the
  6326.          syntactic subscript separator) is a semi-semicolon.
  6327.          Yeah, I know, it's    pretty lame, but $, is already
  6328.          taken for something more important.)
  6329.  
  6330.  
  6331.  
  6332.  
  6333. Page 96                  Nixdorf TARGON Operating System
  6334.  
  6335.  
  6336.  
  6337.  
  6338.  
  6339.  
  6340.              Printed August 7, 1992
  6341. PERL(1)
  6342.  
  6343.  
  6344.  
  6345.      $!         If    used in    a numeric context, yields the current
  6346.          value of errno, with all the usual    caveats.  (This
  6347.          means that    you shouldn't depend on    the value of $!
  6348.          to    be anything in particular unless you've    gotten a
  6349.          specific error return indicating a    system error.)
  6350.          If    used in    a string context, yields the
  6351.          corresponding system error    string.     You can assign
  6352.          to    $! in order to set errno if, for instance, you
  6353.          want $! to    return the string for error n, or you
  6354.          want to set the exit value    for the    die operator.
  6355.          (Mnemonic:    What just went bang?)
  6356.  
  6357.      $@         The perl syntax error message from    the last eval
  6358.          command.  If null,    the last eval parsed and executed
  6359.          correctly (although the operations    you invoked may
  6360.          have failed in the    normal fashion).  (Mnemonic:
  6361.          Where was the syntax error    "at"?)
  6362.  
  6363.      $<         The real uid of this process.  (Mnemonic: it's the
  6364.          uid you came FROM,    if you're running setuid.)
  6365.  
  6366.      $>         The effective uid of this process.     Example:
  6367.  
  6368.           $< = $>;  # set real uid to the effective uid
  6369.           ($<,$>) = ($>,$<);  #    swap real and effective    uid
  6370.  
  6371.          (Mnemonic:    it's the uid you went TO, if you're
  6372.          running setuid.)  Note: $<    and $> can only    be
  6373.          swapped on    machines supporting setreuid().
  6374.  
  6375.      $(         The real gid of this process.  If you are on a
  6376.          machine that supports membership in multiple groups
  6377.          simultaneously, gives a space separated list of
  6378.          groups you    are in.     The first number is the one
  6379.          returned by getgid(), and the subsequent ones by
  6380.          getgroups(), one of which may be the same as the
  6381.          first number.  (Mnemonic: parentheses are used to
  6382.          GROUP things.  The    real gid is the    group you LEFT,
  6383.          if    you're running setgid.)
  6384.  
  6385.      $)         The effective gid of this process.     If you    are on a
  6386.          machine that supports membership in multiple groups
  6387.          simultaneously, gives a space separated list of
  6388.          groups you    are in.     The first number is the one
  6389.          returned by getegid(), and    the subsequent ones by
  6390.          getgroups(), one of which may be the same as the
  6391.          first number.  (Mnemonic: parentheses are used to
  6392.          GROUP things.  The    effective gid is the group that's
  6393.          RIGHT for you, if you're running setgid.)
  6394.  
  6395.          Note: $<, $>, $( and $) can only be set on    machines
  6396.  
  6397.  
  6398.  
  6399. Page 97                  Nixdorf TARGON Operating System
  6400.  
  6401.  
  6402.  
  6403.  
  6404.  
  6405.  
  6406.              Printed August 7, 1992
  6407. PERL(1)
  6408.  
  6409.  
  6410.  
  6411.          that support the corresponding set[re][ug]id()
  6412.          routine.  $( and $) can only be swapped on    machines
  6413.          supporting    setregid().
  6414.  
  6415.      $:         The current set of    characters after which a string
  6416.          may be broken to fill continuation    fields (starting
  6417.          with ^) in    a format.  Default is "    \n-", to break on
  6418.          whitespace    or hyphens.  (Mnemonic:    a "colon" in
  6419.          poetry is a part of a line.)
  6420.  
  6421.      $^D     The current value of the debugging    flags.
  6422.          (Mnemonic:    value of -D switch.)
  6423.  
  6424.      $^F     The maximum system    file descriptor, ordinarily 2.
  6425.          System file descriptors are passed    to subprocesses,
  6426.          while higher file descriptors are not.  During an
  6427.          open, system file descriptors are preserved even if
  6428.          the open fails.  Ordinary file descriptors    are
  6429.          closed before the open is attempted.
  6430.  
  6431.      $^I     The current value of the inplace-edit extension.
  6432.          Use undef to disable inplace editing.  (Mnemonic:
  6433.          value of -i switch.)
  6434.  
  6435.      $^L     What formats output to perform a formfeed.     Default
  6436.          is    \f.
  6437.  
  6438.      $^P     The internal flag that the    debugger clears    so that
  6439.          it    doesn't    debug itself.  You could conceivable
  6440.          disable debugging yourself    by clearing it.
  6441.  
  6442.      $^T     The time at which the script began    running, in
  6443.          seconds since the epoch.  The values returned by the
  6444.          -M    , -A and -C filetests are based    on this    value.
  6445.  
  6446.      $^W     The current value of the warning switch.  (Mnemonic:
  6447.          related to    the -w switch.)
  6448.  
  6449.      $^X     The name that Perl    itself was executed as,    from
  6450.          argv[0].
  6451.  
  6452.      $ARGV   contains the name of the current file when    reading
  6453.          from <>.
  6454.  
  6455.      @ARGV   The array ARGV contains the command line arguments
  6456.          intended for the script.  Note that $#ARGV    is the
  6457.          generally number of arguments minus one, since
  6458.          $ARGV[0] is the first argument, NOT the command
  6459.          name.  See    $0 for the command name.
  6460.  
  6461.  
  6462.  
  6463.  
  6464.  
  6465. Page 98                  Nixdorf TARGON Operating System
  6466.  
  6467.  
  6468.  
  6469.  
  6470.  
  6471.  
  6472.              Printed August 7, 1992
  6473. PERL(1)
  6474.  
  6475.  
  6476.  
  6477.      @INC    The array INC contains the    list of    places to look
  6478.          for perl scripts to be evaluated by the "do EXPR"
  6479.          command or    the "require" command.    It initially
  6480.          consists of the arguments to any -I command line
  6481.          switches, followed    by the default perl library,
  6482.          probably "/usr/local/lib/perl", followed by ".", to
  6483.          represent the current directory.
  6484.  
  6485.      %INC    The associative array INC contains    entries    for each
  6486.          filename that has been included via "do" or
  6487.          "require".     The key is the    filename you specified,
  6488.          and the value is the location of the file actually
  6489.          found.  The "require" command uses    this array to
  6490.          determine whether a given file has    already    been
  6491.          included.
  6492.  
  6493.      $ENV{expr}
  6494.          The associative array ENV contains    your current
  6495.          environment.  Setting a value in ENV changes the
  6496.          environment for child processes.
  6497.  
  6498.      $SIG{expr}
  6499.          The associative array SIG is used to set signal
  6500.          handlers for various signals.  Example:
  6501.  
  6502.           sub handler {     # 1st argument    is signal name
  6503.                local($sig) = @_;
  6504.                print "Caught a SIG$sig--shutting down\n";
  6505.                close(LOG);
  6506.                exit(0);
  6507.           }
  6508.  
  6509.           $SIG{'INT'} =    'handler';
  6510.           $SIG{'QUIT'} = 'handler';
  6511.           ...
  6512.           $SIG{'INT'} =    'DEFAULT'; # restore default action
  6513.           $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
  6514.  
  6515.          The SIG array only    contains values    for the    signals
  6516.          actually set within the perl script.
  6517.  
  6518.      Packages
  6519.  
  6520.      Perl provides a mechanism for alternate namespaces    to
  6521.      protect packages from stomping on each others variables.  By
  6522.      default, a    perl script starts compiling into the package
  6523.      known as "main".  By use of the package declaration, you can
  6524.      switch namespaces.     The scope of the package declaration is
  6525.      from the declaration itself to the    end of the enclosing
  6526.      block (the    same scope as the local() operator).  Typically
  6527.      it    would be the first declaration in a file to be included
  6528.  
  6529.  
  6530.  
  6531. Page 99                  Nixdorf TARGON Operating System
  6532.  
  6533.  
  6534.  
  6535.  
  6536.  
  6537.  
  6538.              Printed August 7, 1992
  6539. PERL(1)
  6540.  
  6541.  
  6542.  
  6543.      by    the "require" operator.     You can switch    into a package in
  6544.      more than one place; it merely influences which symbol table
  6545.      is    used by    the compiler for the rest of that block.  You can
  6546.      refer to variables    and filehandles    in other packages by
  6547.      prefixing the identifier with the package name and    a single
  6548.      quote.  If    the package name is null, the "main" package as
  6549.      assumed.
  6550.  
  6551.      Only identifiers starting with letters are    stored in the
  6552.      packages symbol table.  All other symbols are kept    in
  6553.      package "main".  In addition, the identifiers STDIN, STDOUT,
  6554.      STDERR, ARGV, ARGVOUT, ENV, INC and SIG are forced    to be in
  6555.      package "main", even when used for    other purposes than their
  6556.      built-in one.  Note also that, if you have    a package called
  6557.      "m", "s" or "y", the you can't use    the qualified form of an
  6558.      identifier    since it will be interpreted instead as    a pattern
  6559.      match, a substitution or a    translation.
  6560.  
  6561.      Eval'ed strings are compiled in the package in which the
  6562.      eval was compiled in.  (Assignments to $SIG{}, however,
  6563.      assume the    signal handler specified is in the main    package.
  6564.      Qualify the signal    handler    name if    you wish to have a signal
  6565.      handler in    a package.)  For an example, examine perldb.pl in
  6566.      the perl library.    It initially switches to the DB    package
  6567.      so    that the debugger doesn't interfere with variables in the
  6568.      script you    are trying to debug.  At various points, however,
  6569.      it    temporarily switches back to the main package to evaluate
  6570.      various expressions in the    context    of the main package.
  6571.  
  6572.      The symbol    table for a package happens to be stored in the
  6573.      associative array of that name prepended with an underscore.
  6574.      The value in each entry of    the associative    array is what you
  6575.      are referring to when you use the *name notation.    In fact,
  6576.      the following have    the same effect    (in package main,
  6577.      anyway), though the first is more efficient because it does
  6578.      the symbol    table lookups at compile time:
  6579.  
  6580.       local(*foo) =    *bar;
  6581.       local($_main{'foo'}) = $_main{'bar'};
  6582.  
  6583.      You can use this to print out all the variables in    a
  6584.      package, for instance.  Here is dumpvar.pl    from the perl
  6585.      library:
  6586.  
  6587.  
  6588.  
  6589.  
  6590.  
  6591.  
  6592.  
  6593.  
  6594.  
  6595.  
  6596.  
  6597. Page 100              Nixdorf TARGON Operating System
  6598.  
  6599.  
  6600.  
  6601.  
  6602.  
  6603.  
  6604.              Printed August 7, 1992
  6605. PERL(1)
  6606.  
  6607.  
  6608.  
  6609.       package dumpvar;
  6610.  
  6611.       sub main'dumpvar {
  6612.           ($package) = @_;
  6613.           local(*stab) = eval("*_$package");
  6614.           while (($key,$val) = each(%stab))    {
  6615.           {
  6616.               local(*entry) = $val;
  6617.               if (defined $entry) {
  6618.               print    "\$$key    = '$entry'\n";
  6619.               }
  6620.               if (defined @entry) {
  6621.               print    "\@$key    = (\n";
  6622.               foreach $num ($[ .. $#entry) {
  6623.                   print "  $num\t'",$entry[$num],"'\n";
  6624.               }
  6625.               print    ")\n";
  6626.               }
  6627.               if ($key ne "_$package" && defined %entry) {
  6628.               print    "\%$key    = (\n";
  6629.               foreach $key (sort keys(%entry)) {
  6630.                   print "  $key\t'",$entry{$key},"'\n";
  6631.               }
  6632.               print    ")\n";
  6633.               }
  6634.           }
  6635.           }
  6636.       }
  6637.  
  6638.      Note that,    even though the    subroutine is compiled in package
  6639.      dumpvar, the name of the subroutine is qualified so that its
  6640.      name is inserted into package "main".
  6641.  
  6642.      Style
  6643.  
  6644.      Each programmer will, of course, have his or her own
  6645.      preferences in regards to formatting, but there are some
  6646.      general guidelines    that will make your programs easier to
  6647.      read.
  6648.  
  6649.      1.     Just because you CAN do something a particular    way
  6650.      doesn't mean that you SHOULD do it that way.  Perl is
  6651.      designed to give you several ways to do anything, so
  6652.      consider picking the most readable one.  For instance
  6653.  
  6654.           open(FOO,$foo) ||    die "Can't open    $foo: $!";
  6655.  
  6656.      is better than
  6657.  
  6658.           die "Can't open $foo: $!"    unless open(FOO,$foo);
  6659.  
  6660.  
  6661.  
  6662.  
  6663. Page 101              Nixdorf TARGON Operating System
  6664.  
  6665.  
  6666.  
  6667.  
  6668.  
  6669.  
  6670.              Printed August 7, 1992
  6671. PERL(1)
  6672.  
  6673.  
  6674.  
  6675.      because the second way    hides the main point of    the
  6676.      statement in a    modifier.  On the other    hand
  6677.  
  6678.           print "Starting analysis\n" if $verbose;
  6679.  
  6680.      is better than
  6681.  
  6682.           $verbose && print    "Starting analysis\n";
  6683.  
  6684.      since the main    point isn't whether the    user typed -v or
  6685.      not.
  6686.  
  6687.      Similarly, just because an operator lets you assume
  6688.      default arguments doesn't mean    that you have to make use
  6689.      of the    defaults.  The defaults    are there for lazy
  6690.      systems programmers writing one-shot programs.     If you
  6691.      want your program to be readable, consider supplying the
  6692.      argument.
  6693.  
  6694.      Along the same    lines, just because you    can omit
  6695.      parentheses in    many places doesn't mean that you ought
  6696.      to:
  6697.  
  6698.           return print reverse sort    num values array;
  6699.           return print(reverse(sort    num (values(%array))));
  6700.  
  6701.      When in doubt,    parenthesize.  At the very least it will
  6702.      let some poor schmuck bounce on the % key in vi.
  6703.  
  6704.      Even if you aren't in doubt, consider the mental welfare
  6705.      of the    person who has to maintain the code after you,
  6706.      and who will probably put parens in the wrong place.
  6707.  
  6708.      2.     Don't go through silly    contortions to exit a loop at the
  6709.      top or    the bottom, when perl provides the "last"
  6710.      operator so you can exit in the middle.  Just outdent it
  6711.      a little to make it more visible:
  6712.  
  6713.          line:
  6714.           for (;;) {
  6715.           statements;
  6716.           last line    if $foo;
  6717.           next line if /^#/;
  6718.           statements;
  6719.           }
  6720.  
  6721.  
  6722.      3.     Don't be afraid to use    loop labels--they're there to
  6723.      enhance readability as    well as    to allow multi-level loop
  6724.      breaks.  See last example.
  6725.  
  6726.  
  6727.  
  6728.  
  6729. Page 102              Nixdorf TARGON Operating System
  6730.  
  6731.  
  6732.  
  6733.  
  6734.  
  6735.  
  6736.              Printed August 7, 1992
  6737. PERL(1)
  6738.  
  6739.  
  6740.  
  6741.      4.     For portability, when using features that may not be
  6742.      implemented on    every machine, test the    construct in an
  6743.      eval to see if    it fails.  If you know what version or
  6744.      patchlevel a particular feature was implemented, you can
  6745.      test $] to see    if it will be there.
  6746.  
  6747.      5.     Choose    mnemonic identifiers.
  6748.  
  6749.      6.     Be consistent.
  6750.  
  6751.      Debugging
  6752.  
  6753.      If    you invoke perl    with a -d switch, your script will be run
  6754.      under a debugging monitor.     It will halt before the first
  6755.      executable    statement and ask you for a command, such as:
  6756.  
  6757.      h         Prints    out a help message.
  6758.  
  6759.      T         Stack trace.
  6760.  
  6761.      s         Single    step.  Executes    until it reaches the
  6762.          beginning of another statement.
  6763.  
  6764.      n         Next.    Executes over subroutine calls,    until it
  6765.          reaches the beginning of the next statement.
  6766.  
  6767.      f         Finish.  Executes statements until it has
  6768.          finished the current subroutine.
  6769.  
  6770.      c         Continue.  Executes until the next breakpoint is
  6771.          reached.
  6772.  
  6773.      c line     Continue to the specified line.  Inserts a one-
  6774.          time-only breakpoint at the specified line.
  6775.  
  6776.      <CR>     Repeat    last n or s.
  6777.  
  6778.      l min+incr     List incr+1 lines starting at min.  If    min is
  6779.          omitted, starts where last listing left off.  If
  6780.          incr is omitted, previous value of incr is used.
  6781.  
  6782.      l min-max     List lines in the indicated range.
  6783.  
  6784.      l line     List just the indicated line.
  6785.  
  6786.      l         List next window.
  6787.  
  6788.      -         List previous window.
  6789.  
  6790.  
  6791.  
  6792.  
  6793.  
  6794.  
  6795. Page 103              Nixdorf TARGON Operating System
  6796.  
  6797.  
  6798.  
  6799.  
  6800.  
  6801.  
  6802.              Printed August 7, 1992
  6803. PERL(1)
  6804.  
  6805.  
  6806.  
  6807.      w line     List window around line.
  6808.  
  6809.      l subname     List subroutine.  If it's a long subroutine it
  6810.          just lists the    beginning.  Use    "l" to list more.
  6811.  
  6812.      /pattern/     Regular expression search forward for pattern;
  6813.          the final / is    optional.
  6814.  
  6815.      ?pattern?     Regular expression search backward for    pattern;
  6816.          the final ? is    optional.
  6817.  
  6818.      L         List lines that have breakpoints or actions.
  6819.  
  6820.      S         Lists the names of all    subroutines.
  6821.  
  6822.      t         Toggle    trace mode on or off.
  6823.  
  6824.      b line condition
  6825.          Set a breakpoint.  If line is omitted,    sets a
  6826.          breakpoint on the line    that is    about to be
  6827.          executed.  If a condition is specified, it is
  6828.          evaluated each    time the statement is reached and
  6829.          a breakpoint is taken only if the condition is
  6830.          true.    Breakpoints may    only be    set on lines that
  6831.          begin an executable statement.
  6832.  
  6833.      b subname condition
  6834.          Set breakpoint    at first executable line of
  6835.          subroutine.
  6836.  
  6837.      d line     Delete    breakpoint.  If    line is    omitted, deletes
  6838.          the breakpoint    on the line that is about to be
  6839.          executed.
  6840.  
  6841.      D         Delete    all breakpoints.
  6842.  
  6843.      a line command
  6844.          Set an    action for line.  A multi-line command
  6845.          may be    entered    by backslashing    the newlines.
  6846.  
  6847.      A         Delete    all line actions.
  6848.  
  6849.      < command     Set an    action to happen before    every debugger
  6850.          prompt.  A multi-line command may be entered by
  6851.          backslashing the newlines.
  6852.  
  6853.      > command     Set an    action to happen after the prompt when
  6854.          you've    just given a command to    return to
  6855.          executing the script.    A multi-line command may
  6856.          be entered by backslashing the    newlines.
  6857.  
  6858.  
  6859.  
  6860.  
  6861. Page 104              Nixdorf TARGON Operating System
  6862.  
  6863.  
  6864.  
  6865.  
  6866.  
  6867.  
  6868.              Printed August 7, 1992
  6869. PERL(1)
  6870.  
  6871.  
  6872.  
  6873.      V package     List all variables in package.     Default is main
  6874.          package.
  6875.  
  6876.      ! number     Redo a    debugging command.  If number is omitted,
  6877.          redoes    the previous command.
  6878.  
  6879.      ! -number     Redo the command that was that    many commands
  6880.          ago.
  6881.  
  6882.      H -number     Display last n    commands.  Only    commands longer
  6883.          than one character are    listed.     If number is
  6884.          omitted, lists    them all.
  6885.  
  6886.      q or ^D     Quit.
  6887.  
  6888.      command     Execute command as a perl statement.  A missing
  6889.          semicolon will    be supplied.
  6890.  
  6891.      p expr     Same as "print    DB'OUT expr".  The DB'OUT
  6892.          filehandle is opened to /dev/tty, regardless of
  6893.          where STDOUT may be redirected    to.
  6894.  
  6895.      If    you want to modify the debugger, copy perldb.pl    from the
  6896.      perl library to your current directory and    modify it as
  6897.      necessary.     (You'll also have to put -I. on your command
  6898.      line.)  You can do    some customization by setting up a
  6899.      .perldb file which    contains initialization    code.  For
  6900.      instance, you could make aliases like these:
  6901.  
  6902.      $DB'alias{'len'} = 's/^len(.*)/p length($1)/';
  6903.      $DB'alias{'stop'} = 's/^stop (at|in)/b/';
  6904.      $DB'alias{'.'}    =
  6905.        's/^\./p "\$DB\'sub(\$DB\'line):\t",\$DB\'line[\$DB\'line]/';
  6906.  
  6907.  
  6908.      Setuid Scripts
  6909.  
  6910.      Perl is designed to make it easy to write secure setuid and
  6911.      setgid scripts.  Unlike shells, which are based on    multiple
  6912.      substitution passes on each line of the script, perl uses a
  6913.      more conventional evaluation scheme with fewer hidden
  6914.      "gotchas".     Additionally, since the language has more
  6915.      built-in functionality, it    has to rely less upon external
  6916.      (and possibly untrustworthy) programs to accomplish its
  6917.      purposes.
  6918.  
  6919.      In    an unpatched 4.2 or 4.3bsd kernel, setuid scripts are
  6920.      intrinsically insecure, but this kernel feature can be
  6921.      disabled.    If it is, perl can emulate the setuid and setgid
  6922.      mechanism when it notices the otherwise useless setuid/gid
  6923.      bits on perl scripts.  If the kernel feature isn't    disabled,
  6924.  
  6925.  
  6926.  
  6927. Page 105              Nixdorf TARGON Operating System
  6928.  
  6929.  
  6930.  
  6931.  
  6932.  
  6933.  
  6934.              Printed August 7, 1992
  6935. PERL(1)
  6936.  
  6937.  
  6938.  
  6939.      perl will complain    loudly that your setuid    script is
  6940.      insecure.    You'll need to either disable the kernel setuid
  6941.      script feature, or    put a C    wrapper    around the script.
  6942.  
  6943.      When perl is executing a setuid script, it    takes special
  6944.      precautions to prevent you    from falling into any obvious
  6945.      traps.  (In some ways, a perl script is more secure than the
  6946.      corresponding C program.)    Any command line argument,
  6947.      environment variable, or input is marked as "tainted", and
  6948.      may not be    used, directly or indirectly, in any command that
  6949.      invokes a subshell, or in any command that    modifies files,
  6950.      directories or processes.    Any variable that is set within
  6951.      an    expression that    has previously referenced a tainted value
  6952.      also becomes tainted (even    if it is logically impossible for
  6953.      the tainted value to influence the    variable).  For    example:
  6954.  
  6955.       $foo = shift;           # $foo is tainted
  6956.       $bar = $foo,'bar';       # $bar is also tainted
  6957.       $xxx = <>;           # Tainted
  6958.       $path    = $ENV{'PATH'};       # Tainted, but see below
  6959.       $abc = 'abc';           # Not tainted
  6960.  
  6961.       system "echo $foo";       # Insecure
  6962.       system "/bin/echo", $foo;    # Secure (doesn't use sh)
  6963.       system "echo $bar";       # Insecure
  6964.       system "echo $abc";       # Insecure until PATH set
  6965.  
  6966.       $ENV{'PATH'} = '/bin:/usr/bin';
  6967.       $ENV{'IFS'} =    '' if $ENV{'IFS'} ne '';
  6968.  
  6969.       $path    = $ENV{'PATH'};       # Not tainted
  6970.       system "echo $abc";       # Is    secure now!
  6971.  
  6972.       open(FOO,"$foo");       # OK
  6973.       open(FOO,">$foo");       # Not OK
  6974.  
  6975.       open(FOO,"echo $foo|");  # Not OK, but...
  6976.       open(FOO,"-|") || exec 'echo', $foo;      # OK
  6977.  
  6978.       $zzz = `echo $foo`;       # Insecure, zzz tainted
  6979.  
  6980.       unlink $abc,$foo;       # Insecure
  6981.       umask    $foo;           # Insecure
  6982.  
  6983.       exec "echo $foo";       # Insecure
  6984.       exec "echo", $foo;       # Secure (doesn't use sh)
  6985.       exec "sh", '-c', $foo;   # Considered    secure,    alas
  6986.  
  6987.      The taintedness is    associated with    each scalar value, so
  6988.      some elements of an array can be tainted, and others not.
  6989.  
  6990.  
  6991.  
  6992.  
  6993. Page 106              Nixdorf TARGON Operating System
  6994.  
  6995.  
  6996.  
  6997.  
  6998.  
  6999.  
  7000.              Printed August 7, 1992
  7001. PERL(1)
  7002.  
  7003.  
  7004.  
  7005.      If    you try    to do something    insecure, you will get a fatal
  7006.      error saying something like "Insecure dependency" or
  7007.      "Insecure PATH".  Note that you can still write an    insecure
  7008.      system call or exec, but only by explicitly doing something
  7009.      like the last example above.  You can also    bypass the
  7010.      tainting mechanism    by referencing subpatterns--perl presumes
  7011.      that if you reference a substring using $1, $2, etc, you
  7012.      knew what you were    doing when you wrote the pattern:
  7013.  
  7014.       $ARGV[0] =~ /^-P(\w+)$/;
  7015.       $printer = $1;      #    Not tainted
  7016.  
  7017.      This is fairly secure since \w+ doesn't match shell
  7018.      metacharacters.  Use of .+    would have been    insecure, but
  7019.      perl doesn't check    for that, so you must be careful with
  7020.      your patterns.  This is the ONLY mechanism    for untainting
  7021.      user supplied filenames if    you want to do file operations on
  7022.      them (unless you make $> equal to $<).
  7023.  
  7024.      It's also possible    to get into trouble with other operations
  7025.      that don't    care whether they use tainted values.  Make
  7026.      judicious use of the file tests in    dealing    with any user-
  7027.      supplied filenames.  When possible, do opens and such after
  7028.      setting $>    = $<.  Perl doesn't prevent you    from opening
  7029.      tainted filenames for reading, so be careful what you print
  7030.      out.  The tainting    mechanism is intended to prevent stupid
  7031.      mistakes, not to remove the need for thought.
  7032.  
  7033. ENVIRONMENT
  7034.      HOME     Used if chdir has no argument.
  7035.  
  7036.      LOGDIR     Used if chdir has no argument and HOME    is not
  7037.          set.
  7038.  
  7039.      PATH     Used in executing subprocesses, and in    finding
  7040.          the script if -S is used.
  7041.  
  7042.      PERLLIB     A colon-separated list    of directories in which
  7043.          to look for Perl library files    before looking in
  7044.          the standard library and the current directory.
  7045.  
  7046.      PERLDB     The command used to get the debugger code.  If
  7047.          unset,    uses
  7048.  
  7049.               require 'perldb.pl'
  7050.  
  7051.  
  7052.      Apart from    these, perl uses no other environment variables,
  7053.      except to make them available to the script being executed,
  7054.      and to child processes.  However, scripts running setuid
  7055.      would do well to execute the following lines before doing
  7056.  
  7057.  
  7058.  
  7059. Page 107              Nixdorf TARGON Operating System
  7060.  
  7061.  
  7062.  
  7063.  
  7064.  
  7065.  
  7066.              Printed August 7, 1992
  7067. PERL(1)
  7068.  
  7069.  
  7070.  
  7071.      anything else, just to keep people    honest:
  7072.  
  7073.      $ENV{'PATH'} =    '/bin:/usr/bin';    # or whatever you need
  7074.      $ENV{'SHELL'} = '/bin/sh' if $ENV{'SHELL'} ne '';
  7075.      $ENV{'IFS'} = '' if $ENV{'IFS'} ne '';
  7076.  
  7077.  
  7078. AUTHOR
  7079.      Larry Wall    <lwall@netlabs.com>
  7080.      MS-DOS port by Diomidis Spinellis <dds@cc.ic.ac.uk>
  7081.  
  7082. FILES
  7083.      /tmp/perl-eXXXXXX     temporary file    for -e commands.
  7084.  
  7085. SEE ALSO
  7086.      a2p  awk to perl translator
  7087.      s2p  sed to perl translator
  7088.  
  7089. DIAGNOSTICS
  7090.      Compilation errors    will tell you the line number of the
  7091.      error, with an indication of the next token or token type
  7092.      that was to be examined.  (In the case of a script    passed to
  7093.      perl via -e switches, each    -e is counted as one line.)
  7094.  
  7095.      Setuid scripts have additional constraints    that can produce
  7096.      error messages such as "Insecure dependency".  See    the
  7097.      section on    setuid scripts.
  7098.  
  7099. TRAPS
  7100.      Accustomed    awk users should take special note of the
  7101.      following:
  7102.  
  7103.      *     Semicolons are    required after all simple statements in
  7104.      perl (except at the end of a block).  Newline is not a
  7105.      statement delimiter.
  7106.  
  7107.      *     Curly brackets    are required on    ifs and    whiles.
  7108.  
  7109.      *     Variables begin with $    or @ in    perl.
  7110.  
  7111.      *     Arrays    index from 0 unless you    set $[.     Likewise string
  7112.      positions in substr() and index().
  7113.  
  7114.      *     You have to decide whether your array has numeric or
  7115.      string    indices.
  7116.  
  7117.      *     Associative array values do not spring    into existence
  7118.      upon mere reference.
  7119.  
  7120.      *     You have to decide whether you    want to    use string or
  7121.      numeric comparisons.
  7122.  
  7123.  
  7124.  
  7125. Page 108              Nixdorf TARGON Operating System
  7126.  
  7127.  
  7128.  
  7129.  
  7130.  
  7131.  
  7132.              Printed August 7, 1992
  7133. PERL(1)
  7134.  
  7135.  
  7136.  
  7137.      *     Reading an input line does not    split it for you.  You
  7138.      get to    split it yourself to an    array.    And the    split
  7139.      operator has different    arguments.
  7140.  
  7141.      *     The current input line    is normally in $_, not $0.  It
  7142.      generally does    not have the newline stripped.    ($0 is
  7143.      the name of the program executed.)
  7144.  
  7145.      *     $<digit> does not refer to fields--it refers to
  7146.      substrings matched by the last    match pattern.
  7147.  
  7148.      *     The print statement does not add field    and record
  7149.      separators unless you set $, and $\.
  7150.  
  7151.      *     You must open your files before you print to them.
  7152.  
  7153.      *     The range operator is "..", not comma.     (The comma
  7154.      operator works    as in C.)
  7155.  
  7156.      *     The match operator is "=~", not "~".  ("~" is the one's
  7157.      complement operator, as in C.)
  7158.  
  7159.      *     The exponentiation operator is    "**", not "^".    ("^" is
  7160.      the XOR operator, as in C.)
  7161.  
  7162.      *     The concatenation operator is ".", not    the null string.
  7163.      (Using    the null string    would render "/pat/ /pat/"
  7164.      unparsable, since the third slash would be interpreted
  7165.      as a division operator--the tokener is    in fact    slightly
  7166.      context sensitive for operators like /, ?, and    <.  And
  7167.      in fact, . itself can be the beginning    of a number.)
  7168.  
  7169.      *     Next, exit and    continue work differently.
  7170.  
  7171.      *     The following variables work differently
  7172.  
  7173.         Awk          Perl
  7174.         ARGC          $#ARGV
  7175.         ARGV[0]          $0
  7176.         FILENAME      $ARGV
  7177.         FNR          $. - something
  7178.         FS          (whatever you    like)
  7179.         NF          $#Fld, or some such
  7180.         NR          $.
  7181.         OFMT          $#
  7182.         OFS          $,
  7183.         ORS          $\
  7184.         RLENGTH          length($&)
  7185.         RS          $/
  7186.         RSTART          length($`)
  7187.         SUBSEP          $;
  7188.  
  7189.  
  7190.  
  7191. Page 109              Nixdorf TARGON Operating System
  7192.  
  7193.  
  7194.  
  7195.  
  7196.  
  7197.  
  7198.              Printed August 7, 1992
  7199. PERL(1)
  7200.  
  7201.  
  7202.  
  7203.      *     When in doubt,    run the    awk construct through a2p and see
  7204.      what it gives you.
  7205.  
  7206.      Cerebral C    programmers should take    note of    the following:
  7207.  
  7208.      *     Curly brackets    are required on    ifs and    whiles.
  7209.  
  7210.      *     You should use    "elsif"    rather than "else if"
  7211.  
  7212.      *     Break and continue become last    and next, respectively.
  7213.  
  7214.      *     There's no switch statement.
  7215.  
  7216.      *     Variables begin with $    or @ in    perl.
  7217.  
  7218.      *     Printf    does not implement *.
  7219.  
  7220.      *     Comments begin    with #,    not /*.
  7221.  
  7222.      *     You can't take    the address of anything.
  7223.  
  7224.      *     ARGV must be capitalized.
  7225.  
  7226.      *     The "system" calls link, unlink, rename, etc. return
  7227.      nonzero for success, not 0.
  7228.  
  7229.      *     Signal    handlers deal with signal names, not numbers.
  7230.  
  7231.      Seasoned sed programmers should take note of the following:
  7232.  
  7233.      *     Backreferences    in substitutions use $ rather than \.
  7234.  
  7235.      *     The pattern matching metacharacters (,    ), and | do not
  7236.      have backslashes in front.
  7237.  
  7238.      *     The range operator is .. rather than comma.
  7239.  
  7240.      Sharp shell programmers should take note of the following:
  7241.  
  7242.      *     The backtick operator does variable interpretation
  7243.      without regard    to the presence    of single quotes in the
  7244.      command.
  7245.  
  7246.      *     The backtick operator does no translation of the return
  7247.      value,    unlike csh.
  7248.  
  7249.      *     Shells    (especially csh) do several levels of
  7250.      substitution on each command line.  Perl does
  7251.      substitution only in certain constructs such as double
  7252.      quotes, backticks, angle brackets and search patterns.
  7253.  
  7254.  
  7255.  
  7256.  
  7257. Page 110              Nixdorf TARGON Operating System
  7258.  
  7259.  
  7260.  
  7261.  
  7262.  
  7263.  
  7264.              Printed August 7, 1992
  7265. PERL(1)
  7266.  
  7267.  
  7268.  
  7269.      *     Shells    interpret scripts a little bit at a time.  Perl
  7270.      compiles the whole program before executing it.
  7271.  
  7272.      *     The arguments are available via @ARGV,    not $1,    $2, etc.
  7273.  
  7274.      *     The environment is not    automatically made available as
  7275.      variables.
  7276.  
  7277. ERRATA AND ADDENDA
  7278.      The Perl book, Programming    Perl , has the following
  7279.      omissions and goofs.
  7280.  
  7281.      On    page 5,    the examples which read
  7282.  
  7283.       eval "/usr/bin/perl
  7284.  
  7285.      should read
  7286.  
  7287.       eval "exec /usr/bin/perl
  7288.  
  7289.  
  7290.      On    page 195, the equivalent to the    System V sum program only
  7291.      works for very small files.  To do    larger files, use
  7292.  
  7293.       undef    $/;
  7294.       $checksum = unpack("%32C*",<>) % 32767;
  7295.  
  7296.  
  7297.      The descriptions of alarm and sleep refer to signal
  7298.      SIGALARM.    These should refer to SIGALRM.
  7299.  
  7300.      The -0 switch to set the initial value of $/ was added to
  7301.      Perl after    the book went to press.
  7302.  
  7303.      The -l switch now does automatic line ending processing.
  7304.  
  7305.      The qx// construct    is now a synonym for backticks.
  7306.  
  7307.      $0    may now    be assigned to set the argument    displayed by ps
  7308.      (1).
  7309.  
  7310.      The new @###.## format was    omitted    accidentally from the
  7311.      description on formats.
  7312.  
  7313.      It    wasn't known at    press time that    s///ee caused multiple
  7314.      evaluations of the    replacement expression.     This is to be
  7315.      construed as a feature.
  7316.  
  7317.      (LIST) x $count now does array replication.
  7318.  
  7319.      There is now no limit on the number of parentheses    in a
  7320.  
  7321.  
  7322.  
  7323. Page 111              Nixdorf TARGON Operating System
  7324.  
  7325.  
  7326.  
  7327.  
  7328.  
  7329.  
  7330.              Printed August 7, 1992
  7331. PERL(1)
  7332.  
  7333.  
  7334.  
  7335.      regular expression.
  7336.  
  7337.      In    double-quote context, more escapes are supported: \e, \a,
  7338.      \x1b, \c[,    \l, \L,    \u, \U,    \E.  The latter    five control
  7339.      up/lower case translation.
  7340.  
  7341.      The $/ variable may now be    set to a multi-character
  7342.      delimiter.
  7343.  
  7344.      There is now a g modifier on ordinary pattern matching that
  7345.      causes it to iterate through a string finding multiple
  7346.      matches.
  7347.  
  7348.      All of the    $^X variables are new except for $^T.
  7349.  
  7350.      The default top-of-form format for    FILEHANDLE is now
  7351.      FILEHANDLE_TOP rather than    top.
  7352.  
  7353.      The eval {} and sort {} constructs    were added in version
  7354.      4.018.
  7355.  
  7356.      The v and V (little-endian) template options for pack and
  7357.      unpack were added in 4.019.
  7358.  
  7359. BUGS
  7360.      Perl is at    the mercy of your machine's definitions    of
  7361.      various operations    such as    type casting, atof() and
  7362.      sprintf().
  7363.  
  7364.      If    your stdio requires an seek or eof between reads and
  7365.      writes on a particular stream, so does perl.  (This doesn't
  7366.      apply to sysread()    and syswrite().)
  7367.  
  7368.      While none    of the built-in    data types have    any arbitrary
  7369.      size limits (apart    from memory size), there are still a few
  7370.      arbitrary limits:    a given    identifier may not be longer than
  7371.      255 characters, and no component of your PATH may be longer
  7372.      than 255 if you use -S.  A    regular    expression may not
  7373.      compile to    more than 32767    bytes internally.
  7374.  
  7375.      Perl actually stands for Pathologically Eclectic Rubbish
  7376.      Lister, but don't tell anyone I said that.
  7377.  
  7378.  
  7379.  
  7380.  
  7381.  
  7382.  
  7383.  
  7384.  
  7385.  
  7386.  
  7387.  
  7388.  
  7389. Page 112              Nixdorf TARGON Operating System
  7390.  
  7391.  
  7392.  
  7393.